1

ユーザー入力が Float かどうかを検証したいのですが、プログラムは入力が float であるかどうかをチェックし、「Number is fine」と出力します。それ以外の場合は「Number is not fine」と出力し、失敗した試行を考慮せずにループを続行します。ループの代わりに、別の方法で、代わりに浮動小数点数を入力しようとします。

問題は、ユーザーが「文字」を入力すると、プログラムが無限ループになることです。私が実際にやりたいのは、「番号がうまくいきません」と印刷して続行することです。

なぜこれが起こるのか誰にも教えてもらえますか? また、追加のライブラリを使用しないことを検討してください。

#include <iostream>
#include <windows.h>


using namespace std;
int main()
{
    int x;
    float num;
    cout << "Please enter the amount of numbers you wish to enter" << endl;
    cin >>  x;

    cout << "Please enter the numbers" << endl;
    for(int i=0; i < x;) {
        if(!(cin >> num)) {
            cout << "Number isn't fine" << endl;
            continue;
        }
        cout << "Number is fine" << endl;
        ++i;
    }
    system("pause");
}

@Steveあなたのソリューションは、cin.clear()とcin.ignoreの両方を使用して機能しました

@AndyG ご協力いただきありがとうございますが、残念ながら私は最も簡単な方法に限定されています。

誰かが将来どのように見えるか知りたい場合は、これが最終的なコードです。

#include <iostream>
#include <windows.h>

using namespace std;
int main()
{
    int x;
    float num;
    cout << "Please enter the size of numbers" << endl;
    cin >>  x;

    cout << "Please enter the numbers" << endl;
    for(int i=0; i < x;) {
        if(!(cin >> num)) {
            cin.clear();
            cin.ignore();
            cout << "not a float number" << endl;
            continue;
        }
        cout << "Number is fine" << endl;
        ++i;
    }
    system("pause");
}
4

1 に答える 1

2

数値の読み取りに失敗した場合cin >> num、ストリームは失敗状態 (つまり、failbitが設定されている) になり、失敗の原因となった文字を超えて読み取りません。clear()失敗状態またはignore()不良データに対して何もしないため、永遠にループします。

于 2013-10-31T22:45:40.327 に答える