2

私はこのプログラムを持っています。このプログラムは、テキストファイルの最初の5行以上をcursesウィンドウに印刷してから、パーソナライズされた入力を印刷します。ただし、テキストファイルから行を印刷した後、moveまたはwmoveを使用すると、カーソルは移動しません。とrefresh()の両方を使用して単語を印刷しましたが、カーソルがあった最後の位置に印刷されます。mvprintwとmvwprintwを試しましたが、まったく出力されませんでした。これはコードの一部です

while (! feof(results_file))
    {
        fgets(line,2048,results_file);
        printw("%s",line);
    }
fclose(results_file);
mvwprintw(results_scrn,num_rows_res,(num_col_res/2) - 2,"Close");
wrefresh(results_scrn);
4

1 に答える 1

2

ウィンドウの境界の外で印刷しようとしているのではないかと思います。

特に、私はここでそれを推測します:

mvwprintw(results_scrn,num_rows_res,(num_col_res/2) - 2,"Close");

...num_rows_resresults_scrnウィンドウ内の行数ですが、これは有効な行座標の範囲がから0までであることを意味しnum_rows_res - 1ます。

ウィンドウの外に出ようとしてmove()wmove()、カーソルは実際には移動しません。後続のprintw()またwprintw()はは前のカーソル位置に印刷されます。mvprintw()またはを実行しようとするmvwprintw()と、カーソルを移動しようとした時点で呼び出し全体が失敗するため、何も出力されません。

これが完全なデモンストレーションです(行と列stdscrがあるものに印刷するだけです):LINESCOLS

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

int main(void)
{
    int ch;

    initscr();
    noecho();
    cbreak();

    /* This succeeds: */
    mvprintw(1, 1, ">>>");

    /* This tries to move outside the window, and fails before printing: */
    mvprintw(LINES, COLS / 2, "doesn't print at all");

    /* This tries to move outside the window, and fails: */
    move(LINES, COLS / 2);

    /* This prints at the cursor (which hasn't successfully moved yet): */
    printw("prints at current cursor");

    /* This is inside the window, and works: */
    mvprintw(LINES - 1, COLS / 2, "prints at bottom of screen");

    refresh();
    ch = getch();
    endwin();
    return 0;
}

(実際、関数は結果を返します。それをチェックすると、失敗した場合にあることがわかりますERR。)

于 2011-10-06T00:05:28.030 に答える