我有这个程序将前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);
答案 0 :(得分:2)
我怀疑你正试图在窗户的边界外打印。
特别是,我猜这里:
mvwprintw(results_scrn,num_rows_res,(num_col_res/2) - 2,"Close");
... num_rows_res
是results_scrn
窗口中的行数 - 但这意味着有效行坐标的范围从0
到num_rows_res - 1
。
如果您在窗口外尝试move()
或wmove()
,光标将无法实际移动;后续printw()
或wprintw()
将在前一个光标位置打印。如果您尝试mvprintw()
或mvwprintw()
,整个调用将在尝试移动光标时失败,因此根本不会打印任何内容。
以下是完整演示(仅打印到stdscr
,其中包含LINES
行和COLS
列:
#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
。)