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