下面的程序显示输入并同时输出的'int'值。但是,当我输入一个字符时,它进入一个无限循环,显示输入的前一个'int'值。如何避免输入字符?
#include<iostream>
using namespace std;
int main(){
int n;
while(n!=0){
cin>>n;
cout<<n<<endl;
}
return 0;
}
答案 0 :(得分:9)
无限循环的原因:
cin进入失败状态,这使得它忽略了对它的进一步调用,直到错误标志和缓冲区被重置。
cin.clear();
cin.ignore(100, '\n'); //100 --> asks cin to discard 100 characters from the input stream.
检查输入是否为数字:
在你的代码中,即使是非int类型也会被转换为int。无法检查输入是否为数字,无需将输入输入到char数组中,并且在每个数字上调用isdigit()
函数。
函数isdigit()可用于区分数字和字母。此函数存在于<cctype>
标头中。
is_int()函数看起来像这样。
for(int i=0; char[i]!='\0';i++){
if(!isdigit(str[i]))
return false;
}
return true;
答案 1 :(得分:0)
如果要使用用户定义函数,可以使用ascii / ansi值来限制char输入。
48 -57是0到9值的范围
答案 2 :(得分:0)
#include <iostream>
#include <climits> // for INT_MAX limits
using namespace std;
int main()
{
int num;
cout << "Enter a number.\n";
cin >> num;
// input validation
while (cin.fail())
{
cin.clear(); // clear input buffer to restore cin to a usable state
cin.ignore(INT_MAX, '\n'); // ignore last input
cout << "You can only enter numbers.\n";
cout << "Enter a number.\n";
cin >> num;
}
}
答案 3 :(得分:0)
你需要检查cin失败
和
您需要清除输入流
请参阅以下示例。 它在最近的编译器中进行了测试
#include <iostream>
using namespace std;
void ignoreLine()
{
cin.clear();
cin.ignore();
}
int main(int argc, char const* argv[])
{
int num;
cout << "please enter a integer" << endl;
cin >> num;
while (cin.fail()) {
ignoreLine();
cout << "please enter a integer" << endl;
cin >> num;
}
cout << "entered num is - " << num << endl;
return 0;
}