第一种: 在<iostream>中的getline()函数有两种重载形式:
istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );
getline顾名思义即读入一行,遇到换行/delim/字数达到限定,就会终止读入
第二种: 在<string>中的getline函数有四种重载形式:
istream& getline (istream& is, string& str, char delim);
istream& getline (istream&& is, string& str, char delim);
istream& getline (istream& is, string& str);
istream& getline (istream&& is, string& str);
同理:遇到换行/delim,str读入大小为0
举例说明上述例子:只说明了常用的
输出结果:
这里注意:从上面例子看,使用string中的getline做循环,我又添加了aus.size()作为判断条件。
这是因为:如果只有getline这个判断条件,while判断语句的真实判断对象是cin的状态,也就是判断当前是否存在有效的输入流。因此就算我们换行,对于cin来说也是有效的输入流,只是aus的大小为0而已,所以是跳不出循环的。
另外值得注意的一个问题:在string的getline中
getline(cin,aus);这种情况就是遇到换行就不再读入
getline(cin,aus,'#');这种情况下,换行没有用,必须遇到#才停止读入
也就是说每次换行和标志符只能有一个有效!!!
像下面这种写法是跳不出循环的: