6

ユーザーに入力を求め、検証を試みました。たとえば、私のプログラムは 3 つのユーザー入力を受け取る必要があります。整数以外になると、エラー メッセージが表示され、再度入力を求めるプロンプトが表示されます。実行時に私のプログラムがどのように見えるかは次のとおりです。

数字を入力してください: a

間違った入力

数字を入力してください: 1

数字を入力してください: b

間違った入力

数字を入力してください: 2

数字を入力してください: 3

入力された数字は 1、2、3 です

そして、ここに私のコードがあります:

double read_input()
{
    double input;
    bool valid = true;
    cout << "Enter number: " ;
    while(valid){
        cin >> input;
        if(cin.fail())
        {
            valid = false;
        }
    }
    return input;
}

私の主な方法:

int main()
{
double x = read_input();
double y = read_input();
double z = read_input();
}

最初の入力が整数でない場合、プログラムは自動的に終了します。再度プロンプトを求めることはありません。どうすれば修正できますか?または、ユーザー入力を求めているので、do while ループを使用することになっていますか。

前もって感謝します。

4

3 に答える 3

0

問題は while 条件にあります

bool valid = true;
while(valid){

無効な入力を取得するまでループしますが、これは絶対に望んでいるものではありません! ループ条件はこのようにする必要があります

bool valid = false;
while(! valid){ // repeat as long as the input is not valid

ここにあなたの修正版がありますread_double

double read_input()
{
    double input;
    bool valid = false;
    while(! valid){ // repeat as long as the input is not valid
        cout << "Enter number: " ;
        cin >> input;
        if(cin.fail())
        {
            cout << "Wrong input" << endl;

            // clear error flags
            cin.clear(); 
            // Wrong input remains on the stream, so you need to get rid of it
            cin.ignore(INT_MAX, '\n');
        }
        else 
        {
            valid = true;
        }
    }
    return input;
}

そして、メインでは、必要に応じて倍増するように要求する必要があります。たとえば、

int main()
{
    double d1 = read_input();
    double d2 = read_input();
    double d3 = read_input();

    cout << "Numbers entered are: " << d1 << ", " << d2 << ", " << d3 << endl;

    return 0;
}

read_double()返された値を呼び出して配列に保存するループが必要な場合もあります。

于 2013-06-05T08:41:37.087 に答える