0

ユーザーが整数を入力するかどうかをテストすることになっているこのコード スニペットがあります。これは、ユーザーが文字を入力した場合に機能しますが、小数を入力した場合は機能しません。ここに私のコードスニペットがあります:

Student student;
int id;

while(!(cin >> id))
{
    cout << "\nERROR: Please enter a Positive Whole Number" << endl;
    cin.clear();
    cin.ignore ();
    cout << "Enter Student ID: ";
}

入るAと while ループを繰り返しますが、入る12.5と while ループから外れて続行します。整数に解析されるかどうかをテストしていませんか?文字を受け入れているのに受け入れて12.5いないのはなぜですか?

4

1 に答える 1

1

cin>>id(この場合は「12」)に変換できるものが見つかる限り成功します。int変換できないものに到達すると停止しますが、intすでに読み取られている場合は成功と見なされます。

読み取ったすべてが数字であることを確認するstd::getlineには、を使用して文字列への入力行を読み取り、を使用std::isdigitしてそれらがすべて数字であるかどうかをテストすることができます。(それ自体で)への変換をテストするintと、整数として読み取ることができるものが見つかったことがわかりますが、その後にに変換できなかった他のものが続いているかどうかはわかりませんint

于 2012-11-25T06:05:26.823 に答える