我目前正在重新编程,并从一个简单的二次方程计算器开始。我遇到了意外的行为,我不知道为什么会发生。 我有一段时间检查a,b和c的值是否为数字,如果不是,则显示失败消息。但是对于不可接受的输入中相同数量的无效字符,将重复失败消息。
代码如下:
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是不明确的”
答案 0 :(得分:1)
虽然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');