先来看一下这个函数的作用:引用一下百科里的介绍
原型
istream& getline ( istream &is , string &str , char delim );
istream& getline ( istream& , string& );
参数
is 进行读入操作的输入流
str 存储读入的内容
delim 终结符
返回值
与参数is是一样的
功能
将输入流is中读到的字符存入str中,直到遇到终结符delim才结束。对于第一个函数delim是可以由用户自己定义的终结符;对于第二个函数delim默认为 '\n'(换行符)。
函数在输入流is中遇到文件结束符(EOF)或者在读入字符的过程中遇到错误都会结束。
在遇到终结符delim后,delim会被丢弃,不存入str中。在下次读入操作时,将在delim的下个字符开始读入。
看了这个函数我们来应用一下:
#include <iostream> #include <string> using namespace std; int main() { string str; while(getline(cin,str)){ cout<<str<<endl; } }
我们知道这个Demo我们输入一个字符串元后键入回车就会输出刚才我们键入的字符串,但经过我们调试发现在windows系统下会出现一点下问题,我使用vc写刚才的Demo时
就会出现回车两次才能输出字符串的问题。也就是回车一次不会结束输入。而当我们该一下代码:
#include <iostream> #include <string> using namespace std; int main() { string str; while(getline(cin,str,'#')){ cout<<str<<endl; } }
这样我们就可以输入#结束。可以猜测这个问题跟默认的'\n'有关。
我们知道在Windows
'/r' 回车,回到当前行的行首,而不会换到下一行;
'/n' 换行,换到当前位置的下一行,而不会回到行首;
Unix系统里,每行结尾只有“<换行>”,即"/n"