CIN 将字符串的开头分配给 int,仅在第二次调用中失败
cin assigns beginning of string to int, only fails in second call
在代码段中
for(;;) {
std::cout << "Please enter an integer: ";
if(std::cin >> nInput) {
return nInput;
}
else {
std::cout << "Invalid input! Please enter an integer!n";
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
}
}
CIN会将字符串的开头分配给nInput
,前提是至少第一个字符是数字。例如,这是我的一些控制台输出:
Please enter an integer: 10
Please enter an integer: foo
Invalid input! Please enter an integer!
Please enter an integer: 20bar //this will return 20, leave "bar" in the stream. Until the next cin call, cin.good() returns true
Please enter an integer: Invalid input! Please enter an integer! //fails because "bar is in the stream"
Please enter an integer: -1
如何检查当用户输入"20bar"时,cin 不会返回"20"?或者,如何检查 cin 缓冲区中的更多内容?
在这种情况下,您应该将数据读入std::string
,然后检查字符串以查看是否有有效的输入。 cin >>
对20anything_here
作为整数类型的输入非常满意,因为它一旦找到非整数部分就会停止读取。
分析字符串并确定它满足要求后,可以使用std::stoi
将字符串转换为int
一种选择是读取数字后跟一个字符。如果以下字符'n'
这意味着他们键入的数字之后没有任何内容:
if ( (std::cin >> nInput) && std::cin.get() == 'n' )
相关文章:
- getopt_long_only第二次调用时返回 -1
- 读取文件在第二次调用时返回INVALID_HANDLE
- 当再次触发信号时,从Qt插槽执行的功能被第二次调用时会发生什么?
- 第二次调用 PyObject_CallObject() 失败
- 第二次调用 PyObject_CallObject() 时分段错误
- rsa_private_decrypt第二次被调用时会崩溃
- 在具有相同种子的同一程序中对srand()的第二次调用不会为连续的rand()生成相同的值
- QT 5.6:对QGraphicsScene::addItem()的第二次调用中出现分段冲突
- 为什么在第二次调用时使用默认参数时此模板专用化失败
- 在循环中第二次调用luaT_pushudata时失败
- 如果我对async_read进行两次调用,那么只有在处理完第一次调用之后,才会处理第二次调用,这是否安全
- 第二次调用共享对象时崩溃
- CIN 将字符串的开头分配给 int,仅在第二次调用中失败
- 在第二次调用中生成不同的随机数
- 从第二次调用开始在函数中执行一段代码
- Memcpy 始终复制该值,即使不第二次调用它
- GLUT警告:第二次调用glutInit
- c++:几乎相同的输入,但第二次调用显示段故障
- c++函数在第二次调用后崩溃
- 为什么我不能第二次调用 std::mismatch 函数?