我目前正在重新开始编程,并从一个简单的二阶方程式计算器开始。我得到了一个意想不到的行为,我不知道为什么会发生。我有一段时间检查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;
}
所描述问题的示例。如果有人知道发生了什么,我会感谢的帮助
编辑:我使用wcout和wcin是因为UNICODE字符,比如带有重音符号和希腊符号的字母。我不知道这个问题是否与此有关,但我经常收到错误,说"wcin/wcout不明确">
虽然wcin.clear()
只设置流错误状态标志,但必须重置输入流,例如通过wcin.ignore(...)
如果使用wcin.ignore()
,它将使用默认参数(请参阅此处(:一个字符或文件结尾条件。
输入"aaa"只会提取一个"a",其余部分保留在输入中,将在下一个while循环中再次测试。
从控制台输入通常意味着"Enter"键,其字符为'n'
。这是我们需要用来重置输入的分隔符:
wcin.ignore(100, 'n');
注意我已经写了100
。如果你想丢弃任意数量的字符,那么你需要:
#include <limits>
....
wcin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');