Функции в main () выполняются до завершения предыдущей функции (c ++ Xcode)

Как говорится в заголовке, у меня возникают проблемы, когда функции выполняются до того, как функция завершится. Это проблема, потому что это портит ход моей программы. Моя функция 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 ()

0

Решение

Поскольку вы сказали, что вводите пути к файлам с пробелами, я считаю, что это происходит:

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/

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector