输入数字和字母时 cin.fail 不起作用
Posted
技术标签:
【中文标题】输入数字和字母时 cin.fail 不起作用【英文标题】:cin.fail not working when numbers and letters entered 【发布时间】:2020-01-28 20:45:51 【问题描述】:我正在做一个简单的数据验证,作为向数组输入数字的一部分。现在它大部分都在工作,除了一种情况 - 当我输入一个数字后跟一个字母时,我创建它的错误消息抛出,但数字仍然输入到数组中。更让我困惑的是,当我在 Xcode 中编译程序时它按预期运行,但我描述的问题仅在我使用 g++ 编译程序时出现。任何想法将不胜感激。这是我认为给我带来问题的函数。
float getInput()
float input;
std::cin >> input;
if (std::cin.fail())
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cout << "type char/str not allowed, enter int" << '\n';
return getInput();
else
return input;
【问题讨论】:
只是为了澄清,如果输入123abc
,输入被分配123
,但仍然会抛出错误。对吗?
这并没有解决问题,但不要让这个函数自己调用。递归函数可能非常强大,但它们很少是正确的解决方案。只需编写一个循环:while (!std::cin) /* clean up */ std::cin >> input;
。或者,更常见的是在测试前去掉std::cin >> input;
,放到循环条件中:while (!(std::cin >> input)) /* clean up */
;
@SacrificerXY - 正确,我希望它抛出错误而不接受输入。
@PeteBecker - 是的,递归很好,我主要是想聪明一点,练习在这个上使用递归。
【参考方案1】:
解决了。基本上,现在不是使用递归的时候。我将 if 语句放在 while 循环中,在循环末尾添加了第二个 cin,并将 return 移出循环。那照顾了它。感谢您建议改用循环。
【讨论】:
以上是关于输入数字和字母时 cin.fail 不起作用的主要内容,如果未能解决你的问题,请参考以下文章