即使 std::cout 用于给定代码中的每个字符/在给定代码中的每个字符之后,如何在按 ENTER 之后显示字符串?
Posted
技术标签:
【中文标题】即使 std::cout 用于给定代码中的每个字符/在给定代码中的每个字符之后,如何在按 ENTER 之后显示字符串?【英文标题】:How does a string gets displayed 'after' pressing ENTER even though std::cout was used for/after each character in the given code? 【发布时间】:2021-05-24 14:05:17 【问题描述】:这是一个逐字符读取输入的程序,并以同样的方式打印出来。我在这里遇到的概念疑问是,即使在每次输入每个字符的迭代中都使用了 std::cout ,如何仅在按下 ENTER 键时才显示完整的字符串?
int main()
char c;
while(1)
c = cin.get();
if(cin.eof())
break;
else cout << c;
return 0;
【问题讨论】:
不要用 C 标签标记 C++ 问题;这两种语言完全不同。 您可能使用的是行缓冲终端,在您按下回车之前不会将输入数据发送到您的应用程序 std::cout 是一个流,在读取换行符之前它可能不会刷新。您可以使用 std::flush 强制刷新 终端驱动程序不会让任何字符进入程序,直到您按回车键。阅读Canonical vs non-canonical terminal input。 相关:***.com/questions/22026751/… 【参考方案1】:让我们检查您的代码:
#include <iostream>
using namespace std;
int main()
char c;
while (1)
c = cin.get();
if (cin.eof())
break;
else cout << c;
return 0;
在我们的第一行中,我们创建了一个char
。然后我们进入一个while
循环。 cin.get()
等到用户按下回车键,然后刷新并将输入放入缓冲区。 cin.get()
然后返回缓冲区中的第一个 char
,并删除它返回的 char
。 if (cin.eof())
不执行,因为我们还没有放置 EOF。在接下来的循环中,cin.get()
抓取缓冲区中剩余的 char
s,当缓冲区为空时,等待用户输入更多输入并按 Enter。
std::cin
被缓冲,因此您不会立即获得输入。
另外,请继续阅读Why is iostream::eof inside a loop condition (i.e. `while (!stream.eof())`) considered wrong?。
【讨论】:
以上是关于即使 std::cout 用于给定代码中的每个字符/在给定代码中的每个字符之后,如何在按 ENTER 之后显示字符串?的主要内容,如果未能解决你的问题,请参考以下文章