嗨,有人可以向我解释为什么这两个程序不同吗?
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/