2012-05-24 34 views
3

我有一個ncurses的程序看起來像這樣使用echo()函數調用getch()以確保在執行程序中的下一個語句之前該字符在屏幕上可見嗎?

1. int c =0; 
2. initscr(); 
3. timeout(-1); 
4. printw("Enter a character"); 
5. getch(); 
6. printw("\nOkay\n"); 
7. c = 5; 

我預料的getch()輸出以及以下printw()應該發生的(並且是在屏幕上可見)前的C被修改爲5。但是這似乎並沒有發生(使用qemu-kvm並打破此時驗證)。有什麼理由可能會發生這種情況,或者有什麼方法可以確保輸出在執行下一條語句之前在屏幕上可見? 確實fflush(標準輸出)保證?

該操作系統是使用qemu-kvm運行的虛擬化gentoo。屏幕處於控制檯模式(X未初始化)。

+0

緩衝輸出,就像在普通的c?如果是這樣 - 應該有某種沖洗 - 這可能有助於http://ubuntuforums.org/showthread.php?t=547801 – Anton

+0

@Anton是啊我*猜測*輸出緩衝,但我怎麼驗證並糾正! – AnkurVj

+0

變更日誌表示從版本1.8.2開始,wgetch()之後的輸出會被刷新,你有這個版本嗎? – Anton

回答

1

您可能忘記發出refresh()命令。看到下面的示例代碼似乎工作:

#include <stdlib.h> 
#include <stdio.h> 
#include <unistd.h> 
#include <curses.h> 


int main(void) { 

    WINDOW * mainwin; 
    int c=0; 

    /* Initialize ncurses */ 

    if ((mainwin = initscr()) == NULL) { 
    fprintf(stderr, "Error initialising ncurses.\n"); 
    exit(EXIT_FAILURE); 
    } 

    timeout(-1); 
    printw("Enter a character: "); 
    getch(); 
    printw("\nC = %d Ok\n", c); 
    c = 5; 
    printw("C is now %d\n",c); 
    refresh(); 
    sleep(10); 
    /* Clean up after ourselves */ 

    delwin(mainwin); 
    endwin(); 
    refresh(); 

    return EXIT_SUCCESS; 
} 
相關問題