我一直在尝试创建一个简单的while循环来将数字转换为向量,并进行一些基本的输入验证 . 但是,我发现我的代码发生了一些奇怪的事情 . 我试图让它用户可以输入数字,直到他们输入'0',然后结束循环 . 这很好用 .
但是,我也试图这样做,如果他们输入一个非int(即3.4,a),或者如果他们输入一个负数,它会输出“BAD INPUT”然后退出程序 . 当我输入负数时,它工作正常 . 但是当我输入一个非int时,它不会有任何问题,但仍会退出程序......
同样地,我也试图让它如此,如果他们先输入'0',而没有预先输入任何数字,它会输出“NO NUMBERS”并退出程序 . 这个也退出了程序,但同样,不会有任何问题 .
我的代码如下:
#include <iostream>
#include <vector>
//I know it is considered bad practice for the below part.
using namespace std;
int main()
{
vector<int> numberStorage;
while (cin) {
int numInput = 0;
cin >> numInput;
if (numInput == 0) break;
if (!cin || numInput < 0) {
cout << "BAD INPUT" << '\n';
return false;
}
if (numInput == 0 && numberStorage.size() == 1) {
cout << "NO NUMBERS" << '\n';
return false;
}
numberStorage.push_back(numInput);
}
return 0;
}
任何人都可以帮助我并澄清我的逻辑/代码在这些输入验证中出错的地方吗?感谢您的任何帮助 .
4 回答
试试这个:
在原始代码中,您没有检查cin.fail() . 当你试图在numInput中存储一个不是int的值时,cin无声地失败,当你初始化numInput为0时,它正在退出循环,好像客户端在控制台上输入了数字零一样 .
您可以通过在原始代码的零值条件上添加cout来自行检查 .
干杯
When cin fails, it will assign value 0到
numInput
和你的逻辑默默地退出该计划 .
您可以在设置整数之后使用cin.fail()进行检查,以便检查不是数字 .
结果如下:https://onlinegdb.com/SyIWdqU9m
如果在
cin.fail()
发生的情况下调用cin.clear()
以清除cin
上的错误标志,那么将来的I / O操作将正常工作将是一个很好的做法 .只是推荐!