在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系统的问题?非常希望了解的前辈解答一下。
cin.clear();
每次这一句后面加上cin.sync();