在cin之前打印“cout”?
Posted
技术标签:
【中文标题】在cin之前打印“cout”?【英文标题】:Print "cout" before cin? 【发布时间】:2019-09-04 20:42:47 【问题描述】:我有一个小问题,我不确定 iostream 代码是否有可能解决这个问题,但我认为无论如何都值得一问。
#include <iostream>
#include <string>
using namespace std;
string cmd;
int main()
cout << "-------------" << endl;
cout << "command: ";
cin >> cmd;
cout << "-------------" << endl;
system("pause");
在用户输入cmd
变量之前,是否可以打印第三行cout
?这样,文本字段将被上面和下面的"-"
包裹起来,如下所示:
-------------
command: <user would type here>
-------------
如果这是不可能的,请您指出我可以用来实现这一目标的一些可能的库的方向吗?
【问题讨论】:
是的,你可以,但你必须问自己:值得吗? 您需要某种光标控制库。一些命令行允许您使用转义序列移动光标。这真的取决于你的环境。 嗨@bolov,我正在制作一个基于文本的冒险游戏,用户界面将包含围绕文本字段的内容,所以如果我能在这个例子中简单地弄清楚如何做到这一点,我可以在构建 UI 时进一步实现它 你听说过PDCurses吗? 嗨@Eljay,我有,我只是努力掌握这一切,因为我找不到关于所有功能等的可靠文档。这是你推荐的吗?如果是这样,我会全力以赴并对此进行调查。 【参考方案1】:在 C++ 中没有实现此目的的标准方法。
不同的终端有自己的能力,不同的系统有自己的API用于与终端交互。
在等待输入之前肯定必须先执行底线的输出,但是可以将输出“光标”移动到屏幕底部以外的其他位置。您可以在您打算定位的系统的文档中找到详细信息。
【讨论】:
【参考方案2】:我建议你可以尝试使用SetConsoleCursorPosition function在指定的控制台屏幕缓冲区中设置光标位置。
此代码使用 SetConsoleCursorPosition() 将当前输出位置移动到第 1 行第 9 列:
#include <iostream>
#include <string>
#include <windows.h>
using namespace std;
string cmd;
int main()
cout << "-------------\n" << "command: \n" << "-------------" << endl;
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
if (INVALID_HANDLE_VALUE != hConsole)
COORD pos = 9, 1 ;
SetConsoleCursorPosition(hConsole, pos);
cin >> cmd;
system("pause");
【讨论】:
这完全符合我的要求,谢谢!我现在应该能够通过操纵光标位置来构建我的 UI 的其余部分了!我只有 2 个问题,“hConsole”得到了什么? (可能是控制台的一些参考?) if 语句实际检查的是什么? hConsole:控制台屏幕缓冲区的句柄。您可以在调用CreateConsoleScreenBuffer function 时为控制台屏幕缓冲区指定安全描述符。如果函数成功,返回值是新的控制台屏幕缓冲区的句柄。如果函数失败,返回值是INVALID_HANDLE_VALUE。if语句是为了确保控制台屏幕缓冲区的句柄有GENERIC_READ access。跨度>以上是关于在cin之前打印“cout”?的主要内容,如果未能解决你的问题,请参考以下文章