我目前正在重新编程,并从一个简单的二次方程计算器开始。我遇到了意外的行为,我不知道为什么会发生。
我有一段时间检查a,b和c的值是否为数字,如果不是,则显示失败消息。但是,对于 Not Acceptable 输入中相同数量的无效字符,将重复失败消息。
这是代码:
wcout << "Insert a value for a: \n";
wcin >> a;
while (wcin.fail())
{
wcin.clear();
wcin.ignore();
wcout << L"Please insert a numerical value.\n";
wcin >> a;
}
Example of the problem described。
如果有人知道发生了什么,我将不胜感激
编辑:由于UNICODE字符(例如带重音符号的字母和希腊符号),我使用wcout和wcin。我不知道这个问题是否可能与此有关,但是我经常会收到错误消息,说“wcin / wcout模棱两可”
最佳答案
虽然wcin.clear()
仅设置流错误状态标志,但是必须重置输入流,例如通过wcin.ignore(...)
如果使用wcin.ignore()
,它将使用默认参数(请参见here):一个字符或文件条件结尾。
输入“aaa”只会提取一个“a”,其余保留在输入中,它将在下一个while循环中再次进行测试。
从控制台输入通常意味着使用'Enter'键,其字符为'\n'
。这是我们用来重置输入的定界符:
wcin.ignore(100, '\n');
注意,我已经写了
100
。如果要丢弃任意数量的字符,则需要:#include <limits>
....
wcin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');