getline读取多行
几点说明:
-
cin>> s 是无法读入换行和空格
-
当前面的cin>>w;输入数字之后,数字存储在输入缓冲区,敲回车,输入的数字因为回车的原因传给了w,但是换行符仍然滞留在输入流了,如果在cin>>w 后面有着getline语句,这个换行符就被这个getline读取了,发现getline结果为空
-
cin.getline()不会把’\0’, ‘ ‘, ‘\n’等默认的分隔符写入到字符数组,因此如果在cin>>w后面紧接着的cin.getline语句(可以尝试把ignore()语句注释掉),会变为空读入,再后面的cin.getline()就正常读入每一行内容,并且把读入的分隔符舍弃。
-
cin.getline(char*,numBuff, char delimeter) 和gets(char*)函数,均可以正常得读入输入行. 参数含义:cin.getline(接收字符串的变量,接收字符个数,结束字符)
-
cin.ignore();和cin.get(); //cin.get()都可以用于舍弃输入流中不需要的字符
-
< string>的getline函数,跟cin.getling一样如果输入缓冲中有换行符,需要读入一个空行来消耗此换行符,后面继续的读入才会正常。
#include <iostream> #include <string> using namespace std; int main() { string s; int n; cin>>n; cin.ignore(); for(int i=0;i<n;i++) { getline(cin,s); cout<<s<<endl; } return 0; }