0

正如标题所说,我遇到了函数在函数完成之前执行的问题。这是一个问题,因为它打乱了我的程序流程。我的 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 的文件路径
    • 如果在 VideoConfig1 之前 FilePath2 尚未完成,则使整个程序崩溃
  • 运行 VideoConfig2()
  • 运行 VideoRecord()
4

1 回答 1

4

既然你说你正在输入带空格的文件路径,我相信这就是正在发生的事情:

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 vs getline 的一个很好的参考:http ://www.cplusplus.com/doc/tutorial/basic_io/

于 2013-01-11T04:45:46.470 回答