0

私はちょうどc ++(Javaから来ています)を始めたばかりで、いくつかの基本的な演習をしようとしています. アイデアは、5 以外の入力を求め、ユーザーが 5 を入力するとメッセージを表示し、ユーザーが 5 以外を 10 回入力すると別のメッセージを表示するというものです。コードは次のとおりです。

void notFive () {
    int count = 0;
    while (count < 10) {
        int input = 0;
        cout << "Enter any number other than 5." << endl;
        cin >> input;
        if (input == 5)
            break;
        count++;
    }
    if (count == 10)
        cout<<"You are more patient than I am, you win.";
    else
        cout << "You weren't supposed to enter 5!";
}   
}

私の問題は、このコードが「5 以外の任意の数字を入力してください」と出力することだけだということです。10回言ってから、「あなたは私よりも忍耐強く、あなたが勝ちます」と言います。何が間違っているのですか?

私のすべてのコードが必要な場合 (私がただのばかではないことを確認するため)、ここにあります:

#include <iostream>
#include <stdio.h>
using namespace std;

class Hello {

public:
    void notFive () {
        int count = 0;
        while (count < 10) {
        int input = 0;
        cout << "Enter any number other than 5." << endl;
        if ( ! (cin >> input) ) {
            cout << "std::cin is in a bad state!  Aborting!" << endl;
            return;
}
        if (input == 5)
            break;
        count++;
        }
        if (count == 10)
            cout<<"You are more patient than I am, you win.";
        else
            cout << "You weren't supposed to enter 5!";
    }   
}hello;

int main() {
    Hello h;
    h.notFive();
    return 0;
}
4

3 に答える 3

2

あなたのコードは、私notFivemain. 問題はこのコードの外にあるに違いありません (cin他の人が示唆しているように、おそらく壊れた状態にあるためです)。

于 2013-03-18T19:14:28.703 に答える
1

この行を変更します。

cin >> input

これに:

if ( ! (cin >> input) ) {
    cout << "std::cin is in a bad state!  Aborting!" << endl;
    return;
}

あなたが説明する動作は、このコードが実行される前に何か悪いことが起こった場合にどうなるかです。cin

編集:

これと同じコードを の以前の使用に追加cinして、どこで悪い状態に入っているかを調べます。

このようなことが起こる例としては、コードが を読み込もうとしてint、ユーザーがアルファベットの文字を入力した場合があります。

を呼び出しcin.clear();て、 の動作状態を復元することもできcinます。

于 2013-03-18T19:16:21.660 に答える
0

ここに私のコメントがあります:

  1. fflush(stdin)有効じゃない。はstdinフラッシュできません。また、これは と同じ入力ではない場合がありますcin
  2. cin.failafterを確認する必要がありますcin >> input。私が文字を入力すると、あなたの入力ステートメントは失敗します。
于 2013-03-18T19:11:35.440 に答える