我正在尝试打印一个简单的输入,不同之处在于它最后有一个换行符

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 个,为啥?

不同之处在于增量运算符 ++ 出现在变量之前或变量之后 [重复]

如何让 Python 向后打印输入的消息? [复制]

如何使用 awk 打印最后两列

如何跟踪两个不同的内部网站搜索查询