对于wcin中包含的相同数量的无效字符,重复失败检查消息

时间:2018-11-20 15:45:26

标签: c++ validation input calculator

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

1 个答案:

答案 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');