嗨,有人可以向我解释为什么这两个节目不同?
int main (){
string line;
while (getline(cin,line)){
cout << line;
}
}
int main (){
string line;
while (getline(cin,line)){
cout << line << endl;
}
}
似乎第二个程序打印出所有内容,而第一个程序只会出于某种原因打印最后一行。我正在从一个带有IO重定向的文件中抓取一行,但是当我想要打印出来的行时,我被迫打印一个换行符以获取所有行。
答案 0 :(得分:5)
getline
会在输入结尾处丢弃换行符。但是,在Windows上,换行符分隔符实际上是\r\n
,即回车符后跟换行符。因此,getline
最终存储以回车符结尾的字符串。
当您打印以回车结束的行时,控制台将打印文本并将光标返回到行的开头(因为这是回车的作用)。通常,换行会将光标推到下一行,但由于文本不包含换行符,因此从当前行的开头开始打印下一行 - 覆盖当前行。这就是为什么你只能看到最后一行。
因此,如果要打印出行,则必须输出endl
丢弃的getline
。