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"

 

posted @ 2012-09-30 10:51  春天的故事  阅读(789)  评论(0编辑  收藏  举报