我需要使用printw();但它不起作用,它只是段错误。
我使用了initscr
和endwin
,但它没有改变任何内容。
void aff_battel(char **str)
{
int i;
int j;
char *str2;
if ((str2 = malloc(sizeof(*str) * 23)) == NULL)
return ;
str2 = "---------------------\n\0";
j = 0;
i = 0;
while (str[i] != NULL)
{
initscr();
printw("---------------------\n\0"); /* it doesn't work */
printw("%s", str2); /* here nether */
endwin();
i++;
}
}
知道我已经将initsrc();
放在开头并且结束了循环结束但它仍然没有打印任何东西
void aff_battel(char **str)
{
int i;
int j;
j = 0;
i = 0;
while (str[i] != NULL)
{
printw("---------------------\n");
i++;
}
endwin();
}
答案 0 :(得分:0)
正如Joachim Pileborg所说,在评论中,initscr()
应该在您的计划开始时,endwin()
在最后。
initscr()
设置内部屏幕字符映射,printw()
将写入该字符映射。
要将屏幕地图复制到实际屏幕,您需要致电refresh()
。没有它,你什么也看不见。
endwin()
清除屏幕并将终端重置为正常。
以下是使用简化函数演示ncurses函数的示例。我使用getch()
让程序等待按键然后退出。
注意:在此示例中,它仍会显示没有refresh()
的文本,因为getch()
也会刷新。
#include <ncurses.h>
void aff_battel(char **str)
{
int i;
int j;
j = 0;
i = 0;
while (str[i] != NULL)
{
printw("---------------------\n");
i++;
}
refresh();
}
void main(int argc, char **argv)
{
initscr();
aff_battel(argv);
getch();
endwin();
}