使用rdstate()确保有效输入

时间:2013-09-24 02:15:24

标签: c++ validation input

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

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

0 个答案:

没有答案
相关问题