来自cin的未知行为
Unknown behavior from cin
首先我想说,我知道使用getline是一个更好的选择,但是,我很好奇为什么这段代码不像预期的那样工作:我不能弄清楚为什么
#include <iostream>
#include <string>
using namespace std;
int main() {
while(1) {
int input;
cout << "---> ";
cin >> input;
if(cin.fail()) {
char rd = cin.get();
cout << "failure" << rd << "=" << cin.fail() << " " << endl;
}
}
return 0;
}
预期:如果输入一个整数,继续,否则cin失败,我们从stdin中取出一个字符并输出它。然后继续循环。
在我看来,最终cin.get()应该会清除错误的输入;但它从来没有这样做过:它陷入了一个无限循环。怎么啦?
cin.fail()检测输入的值是否符合变量中定义的值。但是如果cin.fail()为真,则意味着
a)输入的值不适合变量
b)变量不受影响
c)流仍然中断
d)输入的值仍然在缓冲区中,并将用于下一个"cin>> variable"语句。
因此你必须这样做:
a)通过cin.clear()修复流;
b)用cin.ignore(std::numeric_limits::max(),'n');
#include <iostream>
#include <string>
using namespace std;
int main() {
while(1) {
int input;
cout << "---> ";
cin >> input;
if(cin.fail()) {
char rd = cin.get();
cout << "failure" << rd << "=" << cin.fail() << " " << endl;
cin.clear();
cin.ignore();
}
}
return 0;
}
接受输入的整数后,按回车键时将得到一个换行符作为字符。与字符输入
相同#include <iostream>
#include <string>
using namespace std;
int main() {
while(1) {
int input;
cout << "---> ";
cin >> input;
getchar();
if(cin.fail()) {
char rd = cin.get();
getchar();
cout << "failure" << rd << "=" << cin.fail() << " " << endl;
}
}
return 0;
}
相关文章:
- 继承期间显示未知行为的子类
- C++中的cin.ignore()函数不适用于整个流
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 输入中的字符串数未知(以字母表示)
- Problems with std::cin.fail()
- 具有未知值时的时间复杂性
- 链表中写入访问冲突的未知原因
- 正在生成未知类实例
- Bjarne Stroustrup Book - std_lib_facilities.h - 不起作用(未知类型名称)
- 读取文件时运行时的未知行为
- 代码在我的计算机上运行良好,但是在将其提交给coursera时遇到未知的信号11问题
- 由cin中的字符串中未捕获空白引起的分割错误
- 在C++中使用Cin,我如何在1行中输入
- C++ 读取未知数量的整数到 cin 并输出总和
- 尝试将未知数量的字符串推送到向量中,但我的 cin 循环没有终止
- cin 未知大小的一小部分
- 未知数量的对象的 CIN
- 如何将 cin 与未知输入类型一起使用
- 来自cin的未知行为
- 未知类型的 CIN >>函数模板参数