废话不多说直接上代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
string str1;
int x;cin>>x;
while(x--){
getline(cin,str1);
cout<<str1<<"\n";
}
return 0;
}
输入“2” “回车” “asd”
运行结果是这样的:
可以看出当我输入2后按下回车,向下又自动跳了一行,也就是第一行和第三行之间空出来一行。然后输入“asd“输出asd,然后结束。
然后就发现一个问题,明明我输入的2应该输入两次,为什么输入完一次就over了呢?为什么多出来一行空格呢?
仔细查看上面的输入输出,运行结果可以看到 当我输入 2 之后自动的换了一次行,也就是str1已经输出了但是为空。
然后我又换了一种输入方式,又输入了一次,输入为“2 haha” "回车" “asd”运行结果如下:
所以得出结论cin>>的结束符,回车,或者空格都可以,但是当cin读取结束后,cin的结束符还会再缓冲区中存在,并让下次需要读取时进行读取
就拿第二次运行来说,当我输入2后有一个空格,缓冲区从2开始读取读取到空格后结束,但是空格并不做处理,留在缓冲区中做下一次使用,所以就造成了str1为“ haha”(haha前面有个空格),
所以可以看出cin与getline()的区别:
getline()中的结束符,结束后,结束符不放入缓存区;
cin的结束符,结束后,结束符还在缓存区;
所以在使用 cin 后若要使用 getline() 必须要把前面cin遗留的结束符处理掉,解决方法为:在使用getline()之前,加入一行getline()来处理cin留下的结束符;代码如下:
#include <bits/stdc++.h>
using namespace std;
int main()
{
string str1;
int x;cin>>x;
getline(cin,str1);
while(x--){
getline(cin,str1);
cout<<str1<<"\n";
}
return 0;
}
运行结果:
完美~~~