使用getline()

时间:2012-10-13 14:50:59

标签: c++

嗨,有人可以向我解释为什么这两个节目不同?

int main (){
    string line;
    while (getline(cin,line)){
        cout << line;
    }
}

int main (){
    string line;
    while (getline(cin,line)){
        cout << line << endl;
    }
}

似乎第二个程序打印出所有内容,而第一个程序只会出于某种原因打印最后一行。我正在从一个带有IO重定向的文件中抓取一行,但是当我想要打印出来的行时,我被迫打印一个换行符以获取所有行。

1 个答案:

答案 0 :(得分:5)

getline会在输入结尾处丢弃换行符。但是,在Windows上,换行符分隔符实际上是\r\n,即回车符后跟换行符。因此,getline最终存储以回车符结尾的字符串。

当您打印以回车结束的行时,控制台将打印文本并将光标返回到行的开头(因为这是回车的作用)。通常,换行会将光标推到下一行,但由于文本不包含换行符,因此从当前行的开头开始打印下一行 - 覆盖当前行。这就是为什么你只能看到最后一行。

因此,如果要打印出行,则必须输出endl丢弃的getline