getline在windows系统下的怪现象
先来看一下这个函数的作用:引用一下百科里的介绍
原型 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"
找一个博客做自己的女朋友,不管你跟她说什么她都帮你记录,这是多么幸福的一件事啊。如果有女生能做到这点,赶尽娶回家吧!