我正在尝试编写一种方法来收集用户的输入。如果输入的不是正确的 2 个值,则会打印错误消息。我的教授喜欢破解密码,他会坐在那里用头敲键盘,直到有什么东西被破解。仅仅使用cin.good()
orcin.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");
这是我第一次尝试编写测试函数,看看我是否有正确的想法。它不起作用。谁能帮我理解为什么?