如果用户输入多个字符,如何将显示错误消息限制为一个

时间:2018-04-14 14:35:58

标签: c++

我做的示例代码是只接受整数,并显示一条错误消息,告诉用户只允许整数。问题是当用户输入多个字符时,错误消息也将显示相同数量的用户输入。如果用户输入多个字符,如何将显示错误消息限制为一个?

这是我遇到问题的示例输出。

Input Integer: ab
Not a Valid Input! Please Enter a Number:Not a Valid Input! Please Enter a Number:

这是代码:

#include<iostream>

    int number_checker();

    using namespace std;

    int main(){

        int num;

        cout<<"Input Integer: ";
        num=number_checker();

        cout<<"your input is : " <<num;
    }

    int number_checker() //check if input is integer
    {
        int n;
        cin>>n;
            while(cin.fail())
            {
            cin.clear();
            cin.ignore();
            cout<<"Not a Valid Input! Please Enter a Number:";
            cin>>n;
            }
        return n;
    }

1 个答案:

答案 0 :(得分:1)

使用fflush()函数刷新stdin缓冲区。输入和输出在C中的工作方式是通过缓冲区。因此,当您输入多个字符时,所有字符都会存储在缓冲区中。每次循环工作时,它会将一个字符从缓冲区移动到变量n。

举一个例子,如果你编写一个代码来读取三个整数,在每两个cin语句之间使用cout语句,并在一行中用空格分隔三个整数,它就可以正常工作。

int a, b, c;
cout << "Enter an integer: ";
cin >> a;
cout << "Enter an integer: ";
cin >> b;
cout << "Enter an integer: ";
cin >> c;
cout << "Enter an integer: ";
cout << a <<" " << b << " " << c << endl;

您输入的内容为:

10 20 30

该程序运行正常,但输出将是

Enter an integer: 10 20 30
Enter an integer: Enter an integer: 10 20 30

你明白了,对吗? 使用fflush(stdin)时,它会清除stdin缓冲区。这样就没有未决的输入。

修改你的while循环应该有效:

while(cin.fail())
        {
        cin.clear();
        fflush(stdin);
        cout<<"Not a Valid Input! Please Enter a Number:";
        cin>>n;
        }