我正在尝试编写一种方法来收集用户的输入。如果输入了正确的2个值,则会打印错误消息。我的教授喜欢打破密码,他会坐在那里,把头撞在键盘上直到突破。简单地使用cin.good()
或cin.fail()
是不够的,因为某些键击不会被标记,例如输入ctrl + z或某些其他字符串。
我被告知使用rdstate()
是确保标记用户错误的唯一方法,无论输入什么击键组合。
此方法是从用户收集输入,确保它是一个整数(1或2),然后根据用户输入执行逻辑。收集输入会更好吗使用getline()
然后转换为atoi()
的整数?或者使用>>
运算符将输入作为整数直接放入变量中?我听说>>
在处理错误时变得非常混乱。我是C ++的新手,不确定最佳实践。
do {
cout << "Press enter to advance: ";
getline(cin, answer);
int state = cin.rdstate();
if(state!=0)
{
cout << "Invalid input, please press enter.... " << state << endl;
system("PAUSE");
cin.clear();
if(cin.rdbuf()->in_avail()>0)
{
getline(cin, answer);
continue;
}
}
} while (answer == "\n");
这是我第一次尝试编写测试函数,看看我是否有正确的想法。它不起作用。谁能帮我理解为什么?