要了解的第一件事是,C++没有屏幕的概念,作为标准的一部分的语言。标准输出可能是一个文件,打印机和cout不知道区别。
然而,屏幕“设备”本身通常稍微聪明一些,并且可以识别一些命令。其中应用最广泛的是'\ r' - 回车和'\ n' - 换行符。 '\ r'将光标移动到行的开头,'\ n'前进到下一行,但这不符合您的需求,因为您已经尝试过。
看来,这里的唯一方法是使用curses(其中ncurses只是一个实现,尽管是Linux中的标准实现)。它向您展示一个虚拟屏幕,其中包含各种命令来更新它们。然后它仅取出更改的部分,并以优化的方式更新终端。
这只是使用ncurses的典型的C程序的例子,可能是值得看一看:
#include <ncurses.h>
int main()
{
int ch;
initscr(); /* Start curses mode */
raw(); /* Line buffering disabled */
keypad(stdscr, TRUE); /* We get F1, F2 etc.. */
noecho(); /* Don't echo() while we do getch */
printw("Type any character to see it in bold\n");
ch = getch(); /* If raw() hadn't been called
* we have to press enter before it
* gets to the program */
printw("The pressed key is ");
attron(A_BOLD);
printw("%c", ch);
attroff(A_BOLD);
refresh(); /* Print it on to the real screen */
getch(); /* Wait for user input */
endwin(); /* End curses mode */
return 0;
}
的printw()函数写入一个“虚”屏幕。它将东西放入缓冲区并更新一些标志并执行一些其他内部的ncurses簿记。它实际上并没有写任何东西到你的真实屏幕(控制台窗口)。
你可以尽可能多的printw()写作,但是这些东西不会显示在真实的屏幕上,直到你的程序做了其他的事情来让“虚构的”屏幕缓冲区内容转到真实的屏幕。
导致真正的屏幕从printw()缓冲区更新的一件事是refresh()(正如上面的源代码示例那样)。
你有什么平台?在Linux上,ncurses将帮助操纵终端屏幕。 – aggsol 2013-02-25 08:50:08
我正在使用Windows机器 – IcyFlame 2013-02-25 08:50:25
不知道Windows中的控制台是否具有此功能,但可以尝试使用[PDCurses](http://pdcurses.sourceforge.net/doc/index.html),它是一个Windows端口为Curses图书馆 – 2013-02-25 09:02:37