问题描述
我想在 C 中实现一个循环,该循环在按下特定键时停止。为此,我一直在尝试使用 ncurses 库。我有一个离线的 Redhat 系统,无法连接到互联网。运行命令 locate libncurses
后,我得到许多行,例如 /usr/lib64/libncurses++.so.5
。我认为这意味着我的系统上存在 ncurses 库。接下来我尝试运行以下代码来测试ncurses
#include <ncurses.h>
int
main()
{
initscr();
cbreak();
noecho();
scrollok(stdscr,TRUE);
nodelay(stdscr,TRUE);
while (true) {
if (getch() == 'g') {
printw("You pressed G\n");
}
napms(500);
printw("Running\n");
}
}
这取自问题 Using kbhit() and getch() on Linux
当我尝试以下列方式运行时 gcc -o testncurses testncurse.c
我收到错误 undefined reference to 'initscr'
。然后我继续以 gcc -o testncurses testncurse.c -lncurses
的身份运行它。但我收到错误
/usr/bin/ld: cannot find -lncurses
collect2:error: ld returned 1 exit status
我应该怎么做才能让上面的代码运行?
我也尝试过安装较新的 ncurses 库包,但出现错误提示正在安装的包中的文件与已安装的包冲突。
解决方法
首先我建议运行一个 hello world 示例来查看您的库是否正常工作:
<div class='page_body'>
<div class='col_1'>Post navigation</div>
<div class='col_2'>
<div class='rich_text'>
Lorem ipsum dolor sit amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
<br><br>
<div class='table_container'>Table</div>
<br>
Ut enim ad minim veniam,quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
<br>
<div class='table_container_abs'>Absolute table</div>
</div>
</div>
</div>
如果它没有从终端重新安装库,但另一方面尝试使用此命令运行您的代码 #include <ncurses.h>
int main()
{
initscr(); /* Start curses mode */
printw("Hello World !!!"); /* Print Hello World */
refresh(); /* Print it on to the real screen */
getch(); /* Wait for user input */
endwin(); /* End curses mode */
return 0;
}
无需更改名称。 并在每次打印后尝试 refresh() 或 wrefresh()