对于 wcin 中包含的相同数量的无效字符,将重复 Failcheck 消息

Failcheck message gets repeated for the same amount of invalid characters contained inside the wcin

我目前正在重新编程并开始使用简单的二阶方程计算器。我遇到了一个意想不到的行为,我不知道为什么会这样。 我有一段时间检查 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。 如果有人知道发生了什么,我将不胜感激

编辑:我使用 wcout 和 wcin 是因为 UNICODE 字符,例如带重音符号的字母和希腊符号。我不知道这个问题是否与此有关,但我经常收到错误提示 "wcin/wcout is ambiguous"

虽然 wcin.clear() 仅设置流错误状态标志,但必须重置输入流,例如 wcin.ignore(...)

如果您使用 wcin.ignore(),它将使用默认参数(参见 here):一个字符或 文件结尾 条件。

输入"aaa"只会提取一个'a',其余的保留在输入中,将在下一个while-loop中再次测试。

从控制台进入通常意味着'Enter'键,其字符是'\n'。这是我们需要用来重置输入的分隔符:

wcin.ignore(100, '\n');

注意我写了100。如果你想丢弃任意数量的字符,那么你需要:

#include <limits>
....

wcin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');