我目前正在重新编程,并从一个简单的二次方程计算器开始。我遇到了意外的行为,我不知道为什么会发生。
我有一段时间检查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');

10-07 19:04