以这个题为例:POJ2030汉字统计
AC代码:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n;
string s;
cin>>n;
getchar();
while(n--)
{
int cnt=0;
getline(cin,s);
for(int i=0;i<s.size();++i)
if(!(s[i]<=127&&s[i]>=0))
cnt++;
cout<<cnt<<endl;
}
return 0;
}
但是第一次在cin>>n后没有加getchar()
所以在调试样例时:
为什么输入2按回车后立马输出个0,正常不应该是换行等待输入吗?这是为啥呢?、
因为输入2后的回车被while()中第一个getline给读进去了,所以输出的是0.
所以在cin>>n
后加上个getchar()
来读掉2后边的回车。
那为什么while()中的第一个getline()后边的getline()不读前边输入字符的回车呢?
这是因为,getline()在读入的时候会把末尾的回车读到字符串里边,然后再给处理掉.
所以:
cin和getline()搭配使用时中间要加上getchar()