【发布时间】: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 - 是的,递归很好,我主要是想聪明一点,练习在这个上使用递归。