今天下午,在做题的时候,碰到了这个问题。。。
一个很简单的string字符串解决的题,很容易想,但是最后却卡在那里了,一直出错,拿到本地调试才发现问题,就是cin和getline函数一起使用时造成的错误。
代码框架大概是这样的:
int main()
{
int n;
while (cin >> n)
{
string str;
for (int i = 0; i < n; i++)
{
getline(cin, str);
//处理流程
}
}
return 0;
}
拿到本地调试发现n输入之后,到了getline()这个函数的时候,直接跳过了,不让输入。。。
后来才知道,cin输入n之后,拿走的只是n的值,缓冲区还有个回车符,由于缓冲区中的回车被getline()拿走了,导致不能输入。
int main()
{
int a;
string str;
cin >> a;
//cin.get();
//cin.ignore();
getchar();
getline(cin, str);
cout << "hello" << endl;
return 0;
}
解决方法:
-
cin.get() //可以读入包括空格,跳格,回车符在内的空白字符
-
cin.ignore() //丢弃输入的第一个字符。用来防止接收上次输入的回车符
-
getchar(); //这个也可以哦,读取一个字符,包括回车,空格
总之就是将缓冲区剩下的那个换行符先拿走,这个问题就解决了。