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;

getch()c が 5 に変更される前に、以下の出力がprintw()発生する (そして画面に表示される) ことを期待します。これが発生する理由や、次のステートメントが実行される前に出力が画面に表示されるようにする方法はありますか? fflush(stdout) はそれを保証しますか?

OSは、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 に答える