1

次のコードを検討してください。

if(initscr() == NULL) ERROR("Cannot start ncurses mode.\n");

    keypad(stdscr, TRUE);

    cbreak();

    int reply = getch(); 

    if(reply == 'y')
        printw("yes!\n");
    else if(reply == 'n')
        printw("no!\n");
    else
        printw("invalid answer!\n");

    refresh();

    endwin();

入力したキーに関係なく、プログラムはメッセージを出力せずに閉じます。

誰かがこのプログラムの動作を説明できますか? 前もって感謝します。

4

2 に答える 2

2

printw()3 つのメッセージのうちの 1 つを出力するために呼び出してからrefresh()、メッセージを表示します。ここまでは順調ですね。

次にすぐに を呼び出しendwin()ます。(termcap/terminfo の設定によっては) 画面がクリアされる可能性があります。

メッセージが実際に表示される可能性があります。読むのに十分な時間画面にとどまらないだけです。

getch()通話の後に遅延または別の通話を追加してみてくださいrefresh()

于 2012-07-01T01:53:33.000 に答える
0

refresh() と endwin() の間に sleep(5) を挿入すると、より良い結果が得られるはずです。少なくとも、私はそうします。

于 2012-09-05T17:57:08.820 に答える