标签:
程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入
一. cin>>
该操作符是根据后面变量的类型读取数据。
输入结束条件 :遇到Enter、Space、Tab键。
对结束符的处理 :将\n类似的结束符落在缓冲区里.
所以会有如下的程序和结果:
#include <iostream>#include <string>using namespace std;int main(){string s1,s2;cin>>s1;getline(cin,s2);cout<<s1<<endl;cout<<s2<<endl;return 0;}
只输入了一行abc, 然后回车后就输出一行abc, 一行空
这是因为cin在缓冲区里丢下的\n 给后面的getline()当成输入结束的标志了

二.getline(cin, str)
输入结束条件:Enter键
对结束符处理:将\n结束符从缓冲区里清除.
所以会有如下的程序
#include <iostream>#include <string>using namespace std;int main(){string s1,s2;getline(cin,s1);getline(cin,s2);cout<<s1<<endl;cout<<s2<<endl;return 0;}

如果在输入完abc后, 按两次回车, 就会有如下结果

三.getchar()
清除缓冲区里的\n , 建议用getchar(), 这种方式最方便.
四. 例子
先输入一个整数到变量n里 ,然后读入n行字符串, 注意用getchar()消除\n
#include <iostream>#include <string>using namespace std;int main(){int n;string s1;cin>>n;getchar();while(n--){getline(cin, s1);}//process these stringsreturn 0;}
标签:
原文地址:http://www.cnblogs.com/gremount/p/5788691.html