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

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

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

最佳答案

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

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

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

关于c++ - 使用getline(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12874226/

10-13 08:22