3

我有一个看起来像这样的 ncurses 程序

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

我希望在将 c 修改为 5 之前应该发生getch()以及以下的输出printw()(并且在屏幕上可见)。但是这似乎并没有发生(使用 qemu-kvm 并在那时中断进行验证)。是否有任何原因可能会发生这种情况,或者以某种方式确保在执行下一条语句之前输出在屏幕上可见?fflush(stdout) 能保证吗?

该操作系统是使用 qemu-kvm 运行的虚拟 gentoo。屏幕处于控制台模式( X 未初始化)。

4

1 回答 1

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;
}
于 2012-06-08T17:50:40.467 回答