我正在尝试打印一个简单的输入,不同之处在于它最后有一个换行符
Posted
技术标签:
【中文标题】我正在尝试打印一个简单的输入,不同之处在于它最后有一个换行符【英文标题】:I am trying to print a simple input with the difference that it has a new line character in the end 【发布时间】:2020-09-17 23:26:45 【问题描述】:int main(int argc, const char * argv[])
string input;
getline(cin, input);
for (int i = 0; i < 3; i++)
cout << input << endl;
return 0;
输入:
Hello, World! (with a new line in the end)
输出:
Hello, World!
Hello, World!
Hello, World!
什么时候应该:
Hello, World!
Hello, World!
Hello, World!
【问题讨论】:
【参考方案1】:std::getline()
吞下尾随换行符,它不是返回的std::string
值的一部分。
std::endl
输出一个换行符,然后刷新输出。这就是为什么你会得到你看到的输出:
Hello, World!<line break>
Hello, World!<line break>
Hello, World!<line break>
所以,只需写两个换行符,例如:
std::cout << input << std::endl << std::endl;
或者:
std::cout << input << '\n' << std::endl;
或者:
std::cout << input << "\n\n" << std::flush;
然后你会得到你想要的输出:
Hello, World!<line break>
<line break>
Hello, World!<line break>
<line break>
Hello, World!<line break>
<line break>
【讨论】:
我明白,但诀窍是有时输入确实包含额外的换行符,有时不包含,因此我无法手动将其添加到打印语句中。我想知道是否有一个命令可以在输入包含换行符时捕获它 @Sara.S "有时输入确实包含额外的换行符" - 正如我所说,getline()
会吞下它,换行符不会在返回string
。 "sometimes it doesn't" - 然后getline()
不会退出,它会阻塞直到输入换行符。如果是这种情况,那么您不能使用getline()
来读取您的输入。 “因此我不能手动将它添加到打印语句中。” - 是的,你可以。如果getline()
无错误退出,则表示读取了换行符,因此您可以将自己的换行符写入输出。以上是关于我正在尝试打印一个简单的输入,不同之处在于它最后有一个换行符的主要内容,如果未能解决你的问题,请参考以下文章
我正在尝试对二叉树进行曲折遍历。它没有打印最后一个分支的 5 个,为啥?