我在google/stackoverflow上看过类似的帖子.但是,我找不到一个足够接近我的场景的人,我不太了解C/C++,以便将其他建议移植到我的方法中.也许这是一个标志,它本身......
无论如何,这是我的代码:
while (true)
{
    print("\nSend message, enter command, or \"9\" for help.\n");
    if (cin >> input)
    {
        if (input == TERMINAL_HELP)
        {
            //Some help code.
        }
        else if (input == TERMINAL_EXIT)
        {
            //Some exit code.
        }
        else if (input < 4 && input >= 0)
        {
            // Some processing code.
        }
        else
        {
            print("Please enter a valid message.");
        }
    }
    else
    {
        print("Please enter a valid message.");
    }
}
捕获对于范围[0-4]范围之外的单个字符或整数可以正常工作.但是当我把一根绳子放进去时,它变得非常奇怪.它不断地循环自己.但是在第一次之后这应该是不可能的,因为我没有按回车键.它继续,好像它无限地接收一个空白.
如果您有任何建议或可以指出我解决问题的方向,我会很感激!谢谢!
注意:
我试图遵循这个,它在某种程度上起作用.(我从这个链接中得到了if语句中的cin >>输入...)但它不能阻止字符串使程序循环变得奇怪.
只是为了让你开始......
关键点:
这意味着,如果您这样做:
cin >> integer1;
cin >> integer2; // *!
cin >> integer3; // !
cin >> integer4; // !
如果用户在标有(*)的行上提供非整数,那么此时cin将进入错误状态,并且将跳过标有(!)的操作.
很可能这就是为什么你会得到像无限读取循环等奇怪的行为.
要处理这个:
即
cin >> integer1; if(cin.fail()) { cout << "wtf?!"; cin.clear(); .. return; }
cin >> integer2; if(cin.fail()) { cout << "wtf?!"; cin.clear(); .. return; }
cin >> integer3; if(cin.fail()) { cout << "wtf?!"; cin.clear(); .. return; }
cin >> integer4; if(cin.fail()) { cout << "wtf?!"; cin.clear(); .. return; }
cin.reset清除错误标志并允许对流进行进一步操作.但是,所有垃圾数据仍将留在流中.因此,尝试进一步阅读是没有意义的.在cin.reset之后你应该以某种方式删除那些坏数据并从这种情况中恢复.我用".."标记了这些地方,因为有很多方法可以做到.
例如,cin.ignore ..
现在请参考所有其他帖子:)我相信你现在可以快速找到解决方案
编辑:aargh ..对不起,我离实际答案太远了.你真正想要的不是一个好的错误处理,而是类似于sehe写的东西:而不是读整数,你应该读一个"字符串"然后检查它,然后将它们重新解析为整数或视为字符串数据.
| 归档时间: | 
 | 
| 查看次数: | 11133 次 | 
| 最近记录: |