要了解的第一件事是,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