Как говорится в заголовке, у меня возникают проблемы, когда функции выполняются до того, как функция завершится. Это проблема, потому что это портит ход моей программы. Моя функция main () выглядит так:
int main()
{
FilePath1();
FilePath2();
VideoConfig1();
VideoConfig2();
VideoRecord();
return 0;
}
и функции FilePath выглядят так:
void FilePath1()
{
cout << "Please enter the full filepath for where you want to save the first video: ";
cin >> filepath1;
cin.ignore();
}
Проблема в том, что VideoConfig1 () запускается сразу после FilePath1 (), одновременно с FilePath2 (). Кто-нибудь знает, почему это будет происходить?
Я пытался использовать waitKey () в качестве инициализации VideoConfig1 (), но это не имело никакого эффекта.
РЕДАКТИРОВАТЬ:
Программа должна работать следующим образом:
- Запустите FilePath1 ()
- заставить пользователя ввести путь к файлу для video1, который будет сохранен
- Запустите Filepath2 ()
- заставить пользователя ввести путь к файлу для video2, который будет сохранен
- Запустите VideoConfig1 ()
- Запустите VideoConfig2 ()
- Запустите VideoRecord ()
Две программы FilePath запускаются в терминале, в то время как другие открывают свои соответствующие окна видео. В настоящее время программа делает следующее:
- Запустите FilePath1 ()
- заставить пользователя ввести путь к файлу для video1, который будет сохранен
- Запустите Filepath2 () И VideoConfig1 ()
- заставить пользователя ввести путь к файлу для video2, который будет сохранен
- если FilePath2 не был завершен к тому времени, когда VideoConfig1 завершил работу, завершите работу всей программы
- Запустите VideoConfig2 ()
- Запустите VideoRecord ()
Поскольку вы сказали, что вводите пути к файлам с пробелами, я считаю, что это происходит:
FilePath1();
FilePath2();
...
void FilePath1()
{
cout << "Please enter the full filepath for where you want to save the first video: ";
cin >> filepath1;
// user enters the following sans quotes: "c:\my files\file.ext"// filepath1 becomes "c:\my"
cin.ignore();
// cin.ignore() with no params will clear ONE character from the stream
// the space is removed from the input stream
}
void FilePath2()
{
cout << "Please enter the full filepath for where you want to save the first video: ";
cin >> filepath2;
// at this point, there is still data in the input buffer,
// so filepath2 becomes: "files\file.ext" and execution continues
// without waiting on user input
cin.ignore();
// the return is removed from the input stream, input stream is now empty
}
Как вы и предлагали, вы хотите использовать getline, поскольку ожидаете пробелы в вводе. Вот хорошая ссылка, чтобы прояснить cin против getline: http://www.cplusplus.com/doc/tutorial/basic_io/
Других решений пока нет …