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