2 iss 36 Iss_36 于 2014.07.18 10:22 提问

mac系统下cin 输入出错的问题

在mac下用Xcode 5.0.2练习c++。碰到一个问题,困扰我一整天了。代码如下:

#include
#include
using namespace std;

int main()
{
double x;
string dummy;
while (true) {
cin>>x;
if (cin.fail()) {
cout<< "fail, and dummy is ";
cin.clear();
cin >> dummy;
cout << dummy << endl;
} else {
cout << "input number is " << x << endl;
}
}
return 0;
}

输入 a
输出是
fail, and dummy is
从结果来看,cin好像把a吞掉了,没有被读进dummy中,但是我查资料发现cin如果读取的类型不匹配,是会存在缓冲区里等待下次读取的,也就是说,输入 a,输出应该是
fail, and dummy is a

类似的代码在 vs2012下就是正确的。
或者,输入字母g,结果就正确了,输出是fail, and dummy is g,蛋疼的我试了下,a到f都不正确,g正确。好奇怪!
或者把double类型改为int,则输入a,结果也正确。

我在命令行下用clang++编译,问题依旧,用g++编译,问题依旧。

为什么会这样呢?是不是mac系统的问题?非常希望了解的前辈解答一下。

1个回答

zuoyigexingfude
zuoyigexingfude   2014.07.19 08:37

cin.clear();
每次这一句后面加上cin.sync();

Csdn user default icon
上传中...
上传图片
插入图片