#include <iostream>
using namespace std;
int main()
{
int i;
cout << "Enter: " << endl;
cin >> i;
cout << cin.fail() << endl;
}
这是我错误检查的典型实现,以确保我输入有效的输入,这就是我所教的内容。我上面代码的问题是如果我输入&#39; 4d&#39;它将4存储在变量&#39; i&#39;中,但保留了&#39; d&#39;在缓冲区中,所以cin.fail()测试返回false,但我希望它返回true。如果我输入&#39; c&#39;或者&ccc&#39; etc ... cin.fail()按我的意愿返回true。
是否有适当的命令来测试我所描述的内容?
答案 0 :(得分:1)
我怀疑有多种方法可以解决您的问题。我可以想到以下两点。
阅读i
后立即获取下一个字符。如果该字符不是空格字符,则可以将其标记为错误。
cin >> i;
if ( cin ) // reading to i was successful.
{
int c = cin.get();
if (!isspace(c) )
{
// There was a non whitespace character right
// after the number.
// Treat it as a problem
}
}
读取字符标记并检查其中是否有任何字符。
std::string token;
cin >> token;
for ( auto c : token )
{
if (!isdigit(c) )
{
// Problem
}
}