我做的示例代码是只接受整数,并显示一条错误消息,告诉用户只允许整数。问题是当用户输入多个字符时,错误消息也将显示相同数量的用户输入。如果用户输入多个字符,如何将显示错误消息限制为一个?
这是我遇到问题的示例输出。
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;
}
答案 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;
}