【发布时间】:2020-01-23 23:39:35
【问题描述】:
我正在尝试创建一个非常简单的聊天应用程序,用户在其中输入内容(由 cin 接收),然后我手动回显他们的输出,但 cin 在用户按键盘输入后自然会打印到控制台。
有没有办法在用户从 cin 返回后将此回显抑制回 cout,以便我可以用自己的消息覆盖它?
例如:
int main()
{
string str;
while(true)
{
getline(cin, str)
cout << "Person: " << str << endl;
}
}
输出如下:
Some text I typed
Person: Some text I typed
当用户发送新行时,第一行会自动回显到终端。这是我想压制的线。
有什么想法吗?如果可能的话,我会尽量避免使用任何第三人称图书馆。
【问题讨论】:
-
输入文本时第一行不是打印出来的吗? (而不是按回车后)?
-
您是否尝试过使用
\r覆盖第一行? -
该行没有“回显到终端”,也没有“cin 自然打印到控制台”。 cin 不是你的 tty。 cout 不是你的 tty。不要将两者混为一谈。您看到的问题是终端处于熟化模式并显示正在键盘上输入的数据。 (例如,您的程序与这些字符的显示无关)。如果您想更改终端的行为,您需要将 tty 置于原始模式。而且您确实想使用 3rd 方库来做到这一点。
-
相关:Reading a password from std::cin。我也会研究类似ncurses
-
"cin 在用户点击输入后自然打印到控制台“你为什么这么认为? “自然”对您意味着什么?