读书人

c++的输入有关问题(getline())。好奇

发布时间: 2013-07-08 14:13:00 作者: rapoo

c++的输入问题(getline())。。好奇怪。。
int main()
{
string s;
char a;
cin>>a;
cout << a << endl;
getline(cin,s);
cout << s;
}

为什么在输入一个字符给a之后,然后终端里会显示输入的a的值,然后程序就结束了?为什么不让我再输入字符串s了呢?

如果在输入a的时候不是输入一个字符而是一个字符串,比如“aaa tttt”,则终端里会出现:
a
aa tttt
然后程序结束。

这是为什么呢请问?谢谢各位了! C++ String cin getline 输入
[解决办法]

引用:
Quote: 引用:

stdin是缓冲式输入,必须在输入换行后才读入a.
但是它只把第一个字符读出,并不处理输入缓冲区中的换行符。
然后getline遇到了换行符,输入结束。

在getline之前加一句:
cin.ignore(0x7fffffff,'\n');

那我为什么把getline(cin,s);换成cin>>s;就可以了呢?cin不会遇到了缓冲区里的换行符就输入停止么?谢谢!


>>操作符会跳过所有的空白字符,然后输入直到又遇到空白字符。所以这时可以输入,因为它跳过了缓冲区中的换行符。

但是,它不能代替getline,因为它会在再次遇到空白字符时停止输入:

输入:
abc 123 xyz

用getline会得到“abc 123 xyz”,用>>会得到“abc”。

读书人网 >C++

热点推荐