是否可以在不覆盖输入中的当前文本的情况下进行 cout?

Posted

技术标签:

【中文标题】是否可以在不覆盖输入中的当前文本的情况下进行 cout?【英文标题】:Is it possible to cout without overwriting current text in the input? 【发布时间】:2013-11-13 07:50:43 【问题描述】:

好的,假设我有一个程序可以在用户输入信息时计算一行。

对于这个例子,假设我们正在使用代码

cout << "THIS CODE IS BEING COUTED" << endl;

假设对于我们的示例,用户正在输入一个输入,而目前他们只输入了“hello”,但还没有按下回车键。

就目前而言,当该行执行时,用户将看到 “你好这个代码正在被计算” 他们将被赋予新的一行来输入信息。

我想要做的是而不是cout'ing,我想获取当前输入中的文本,从输入中删除它,cout需要cout'ed的行,然后重新输入输入信息。

这是有道理的还是一堆乱七八糟的废话?

感谢阅读。

编辑:澄清:我想要它,所以如果我在我的输入中输入了一个字符串并且我 cout,那么 cout 将显示在我的输入上方,而不是在我的输入之后插入它。我还希望我的输入不受影响,以便用户可以继续输入或删除已输入的内容。

【问题讨论】:

我不确定我对 cout 被“动词化”的感觉! 我想知道您是否担心调试信息会干扰您的输入。如果是这样,您可以使用 cerr 并重定向它,或者使用调试日志文件 为什么要在用户输入内容时输出信息,cout 在另一个线程中? 【参考方案1】:

如果您逐个字符地获取输入,那么当您需要输出文本时,您可以通过打印回车符“\r”将输出位置移动到行首。然后您的输出将覆盖当前输入,然后打印换行符并重新打印到目前为止输入的内容

cout << "\r" << output << "\n" << currentinput;

如果输出比输入短,那么你只会部分覆盖输入,在这种情况下,你可以用空格填充输出,直到当前输入的长度

【讨论】:

【参考方案2】:

您可以在一个带有cin &gt;&gt; data 的主线程中询问用户,并通过fread 或类似FILE* 句柄从其他线程中的标准输入读取数据。

在用户输入您想要的数据后,您可以清除屏幕(例如通过conio.h 中的clrscr() 或任何其他更好的方式)并找到您想要的数据。

【讨论】:

以上是关于是否可以在不覆盖输入中的当前文本的情况下进行 cout?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不覆盖当前数据的情况下更新 Mongoose 中的混合类型字段?

是否可以在不知道它们是啥的情况下覆盖所有 css 样式? [复制]

是否可以在不关闭 .txt 的情况下使 StreamWriter 覆盖行?

是否可以在不启动核心定位的情况下向用户询问当前位置

如何在不覆盖当前内容的情况下写入文件? [复制]

在不覆盖 iPhone 上的当前视图的情况下呈现模态视图控制器