1

メニューを表示してから操作することで、ユーザーからの入力を受け取る C++ コンソール アプリケーションがあります。ユーザーが整数値を入力するとすべて正常に動作しますが、ユーザーが「? 」を入力すると、すべて正常に動作します。' ('display help' オプションとして処理したかった) コードは無限ループを開始し、std::cin>>呼び出し時にブロックしません。これは期待されていますか?ここで何が欠けていますか?

int queryAction()
{
  while(1) {
    char selection;
    std::cout << "Action: ";
    std::cin >> selection;

    switch(selection)
    {
      //Some code that acts on the selection
      ...
    }
  }
}

フォローアップ:std::cin.clear()すべての人に電話をかける前 に追加するcin>>とよいでしょう。私のフォローアップの質問は、有効なASCII文字である必要がある入力にエラー状態が設定されているのはなぜですか?

4

1 に答える 1

4

読み取りが成功したかどうかを確認することはありません。プログラミングの基本的な部分は、適切なエラー処理です。ストリームから a を読み取ることができないstd::cin >> selection;場合は失敗し、ソースの最後に到達した場合は を設定します。chareofbit

これを確認する簡単な方法は、次のようなものを使用することです。

if (!(std::cin >> selection)) // Check if operation failed
{
    std::cout << "Failed to read!\n"; // Notify user
    std::cin.clear(); // Reset stream
    // Ignore rest of line
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
于 2013-01-30T21:12:21.597 に答える