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() と同時に開始されることです。なぜこれが起こるのか誰にも分かりますか?

VideoConfig1() の初期化として waitKey() を使用してみましたが、効果がありませんでした。

編集:

プログラムは次のように動作するはずです。

  • FilePath1() を実行
    • video1 を保存するためのファイルパスをユーザーに入力してもらいます
  • Filepath2() を実行
    • 保存する video2 のファイルパスをユーザーに入力してもらいます
  • VideoConfig1() を実行します
  • VideoConfig2() を実行します
  • VideoRecord() を実行

2 つの 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 と getline を明確にするための参考資料は次のとおりです: http://www.cplusplus.com/doc/tutorial/basic_io/

于 2013-01-11T04:45:46.470 に答える