0

ここで 2 つの問題があります。

  1. 有効な入力 (正の数) を入力すると、ベクトルに正常に挿入されますが、同じ質問を再度行う必要があるときに別の入力を待っている次の空白行に戻ります。そして、そうです。他のすべての入力だけで、なぜそのような空白行で停止するのですか?

  2. Ctrl+Zが無効な入力として失敗する代わりにファイルの終わりを知らせるように、これを再配置するにはどうすればよいですか?

    do
    {   
     cout << "\nPlease enter a homework score<'Ctrl-z' when done>: ";
     cin >> value;
    
     while(cin.fail() || value < ZERO)
     {
         cout << "not a valid positive numerical value. try again. \n";
         cin.clear();
         cin.ignore(numeric_limits<int>::max(),'\n');
         cout << "\nplease enter a valid homework score<'Ctrl-z' when done>: ";
         cin >> value;
     }  
         assignmentScore.push_back(value);
    
    }while(cin >> value);
    
4

3 に答える 3

1
  1. あなたの質問が表示されない理由は、質問を表示するのは 1 回だけで、それを 2 回要求したためです。初めて質問するのは、最初のcout << "..."行の直後です。2 回目は while ループ条件にあります: while (cin >> value). その2回目は不要であり、非常に珍しい構造であるため、デバッガーで実行するまでずっと見逃していました:)

  2. コードを再配置することで、質問の出力を複製する必要がなくなります。そのようなコード構造の例については、私の他の回答を参照してください。を探しdo() ... while (not ok)ます。

  3. 通常、標準入力ストリームでファイルの終わりに到達することはありません。到達するのは、もう一方の端 (端末) が「パイプ」を閉じたときだけです。つまり、ファイルの終わりに達すると、それ以外は何も読み取れなくなります。プログラムはこの時点でミュートされ、それ以上入力を受け取ることはありません。それはおそらくあなたが望むものではありません。センチネル値を使用するという提案 (「タイプ -1 で終了」など) はより理にかなっています。

于 2013-09-08T06:15:45.477 に答える