我如何决定在控制台的哪个位置写入文本? (即:97% 98% 99%...)
How do I decide where to write text on the console? (ie: 97% 98% 99%....)
我希望能够告诉 cout
在哪里写一些特定的文本,例如,我可以通过每次覆盖它来显示增加的百分比 "updated"它改变了。
像 Progress: 97%
变成 Progress: 98%
然后 Progress: 99%
都在同一个地方,可能不需要每次都重新处理整个屏幕输出。
我记得 QBasic(从很久以前开始)有一个专门用于此目的的方法,但似乎我在 C++ 中找不到更多 "modern"。
无论我走到哪里,我都会看到人们提到 Curses
或其他 "cursed" 库,我担心它们会使我的代码膨胀,包含不需要的功能以及可能的漏洞和故障。
或者更糟的是,他们建议只用数十或数百个 \n
到 "hide the dust under the carpet".
淹没输出流
我刚刚想到的另一个想法是构建某种数组来存储输出,然后在循环 cout
-ish 函数中进行处理,这样我所要做的就是更改我需要的数组部分,以某种方式清除当前屏幕内容并通过修改重新输出它。
除非这仍然需要 Windows' 被诅咒的 system
库来清除屏幕或者只是 Curses
;或 \n
机关枪函数来隐藏之前的输出。
有更优雅的and/or基于 C++ 标准的可行解决方案吗?
Any more elegant and C++ standard based viable solution?
基本上没有,因为如前所述,C++ 标准没有终端功能的概念。
虽然有 standard escape character literal '\b'
用于放置退格键(将光标定位回当前行)。这应该适用于大多数可用的终端类型。
对于如图所示的简单代码,大多数人会使用简单的控制台输出,后跟 \r。这会将光标移动到大多数终端上同一行的左侧位置,因此您可以打印 'on top' 已打印的行。这绝对不是 C++ 标准,但我觉得它足够优雅。
我希望能够告诉 cout
在哪里写一些特定的文本,例如,我可以通过每次覆盖它来显示增加的百分比 "updated"它改变了。
像 Progress: 97%
变成 Progress: 98%
然后 Progress: 99%
都在同一个地方,可能不需要每次都重新处理整个屏幕输出。
我记得 QBasic(从很久以前开始)有一个专门用于此目的的方法,但似乎我在 C++ 中找不到更多 "modern"。
无论我走到哪里,我都会看到人们提到 Curses
或其他 "cursed" 库,我担心它们会使我的代码膨胀,包含不需要的功能以及可能的漏洞和故障。
或者更糟的是,他们建议只用数十或数百个 \n
到 "hide the dust under the carpet".
我刚刚想到的另一个想法是构建某种数组来存储输出,然后在循环 cout
-ish 函数中进行处理,这样我所要做的就是更改我需要的数组部分,以某种方式清除当前屏幕内容并通过修改重新输出它。
除非这仍然需要 Windows' 被诅咒的 system
库来清除屏幕或者只是 Curses
;或 \n
机关枪函数来隐藏之前的输出。
有更优雅的and/or基于 C++ 标准的可行解决方案吗?
Any more elegant and C++ standard based viable solution?
基本上没有,因为如前所述,C++ 标准没有终端功能的概念。
虽然有 standard escape character literal '\b'
用于放置退格键(将光标定位回当前行)。这应该适用于大多数可用的终端类型。
对于如图所示的简单代码,大多数人会使用简单的控制台输出,后跟 \r。这会将光标移动到大多数终端上同一行的左侧位置,因此您可以打印 'on top' 已打印的行。这绝对不是 C++ 标准,但我觉得它足够优雅。