0

我正在尝试编写一种方法来收集用户的输入。如果输入的不是正确的 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");

这是我第一次尝试编写测试函数,看看我是否有正确的想法。它不起作用。谁能帮我理解为什么?

4

0 回答 0