1

嗨,有人可以向我解释为什么这两个程序不同吗?

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

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

似乎第二个程序打印了所有内容,而第一个程序由于某种原因只会打印最后一行。我正在处理一项从具有 IO 重定向的文件中抓取行的任务,但是当我想打印这些行时,我不得不打印一个换行符来取出所有行。

4

1 回答 1

5

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

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

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

于 2012-10-13T14:57:02.337 回答