我想编写一个简单的c ++ / c控制台应用程序,以显示我的进程1%2%。 现在,我一行一行地打印出来,如
finished 1%
finished 2%
等
如何在不打印新行的情况下更新百分比x%?
另外,我想打开两个控制台窗口,一个显示消息,一个显示上面的过程。如何打开另一个控制台窗口?
答案 0 :(得分:2)
在大多数终端上,您可以打印ASCII回车'\ r'(十进制值13),将光标返回到当前行的左侧,允许您覆盖之前的值。或者,您可以发送退格('\ b',ASCII 8)以向左移动单个字符。它们都不会自动删除已显示的内容,但您可以随时覆盖您不想再看到的任何空格。或者,您可以使用特定控制台支持的控制代码(例如vt100,vt220 ......),这些控制代码可能具有更多高级功能,例如“清除到行尾”。许多库可用于检测终端类型并使用它支持的代码,或者在必要时从许多更简单的库中综合高级操作:在Linux和UNIX上,ncurses库是一个不错的选择。
C ++没有控制台窗口的概念。打开第二个窗口很大程度上取决于您正在使用的操作系统,也可能取决于您指定的图形库。但是,在任何操作系统上,您都可以让应用程序将一些消息写入文件,然后从您自己打开的另一个窗口中检查该文件。在Linux / UNIX上,实用程序“less”非常适合检查日志文件 - 并且在您运行较少时向您显示内容,您可以要求它在写入文件时“跟踪”新数据。
答案 1 :(得分:1)
在Windows上,您可以将光标移动到屏幕上的任何位置,然后从那里开始打印:
COORD c;
c.X = x; c.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);
当然,您需要包含windows.h
答案 2 :(得分:0)
您可以通过多种方式更新进度消息。您可以打印退格字符以将光标向左移动,然后在旧输出上进行写入。如果您的控制台支持ANSI转义序列,则可以使用转义序列来清空该行并重新绘制它。
使用的最佳技术可能取决于您使用的控制台(不同的控制台支持不同的东西)。你使用什么平台,以及什么控制台?
答案 3 :(得分:0)
您似乎在谈论Windows控制台应用程序。
每个Windows进程最多与一个控制台窗口关联。
你需要两个控制台窗口,然后你可以启动另一个进程并将输出管道输出到它,或通过套接字或Windows“邮件槽”或其他任何方式与它通信。