为什么使用getch()会显示错误?c44struct node
{
int data;
struct node *next;
} *start=NULL;
void create()
{
char ch;
do
{
struct node *new_node,*current;
new_node = (struct node *)malloc(sizeof(struct node));
printf("\nEnter the data : ");
scanf("%d",&new_node->data);
new_node->next = NULL;
if(start == NULL)
{
start = new_node;
current = new_node;
}
else
{
current->next = new_node;
current = new_node;
}
printf("nDo you want to creat another : ");
ch = getch();
} while(ch!='n');
}
这是代码的一部分,其中包含getch()。
当我尝试在在线编译器中运行此代码时,出现以下错误:
undefined reference to getch
collect2: error: 1d returned 1 exit status
如何解决这个问题?...请帮忙。
- Tannia5个回答1010getch函数不是标准C库的一部分,它只存在于Windows中。由于它不是标准函数,所以它的真实名称是_getch(注意前导下划线)。根据您在线编译器的错误信息,它使用的是GCC,并且很可能在Linux环境中运行,因此没有getch函数(或_getch)。
如果要具有可移植性,请改用fgetc或getc,或者使用getchar(但请注意这些函数返回一个int)。
- Some programmer dude11更进一步,ncurses 库中有一个 getch() 函数可以产生同样的作用,但在调用它之前必须先初始化 ncurses。 - Luis Colorado回答链接11在Linux中有一个getch函数,但它是在一个库中的。
#include
请参考http://linux.die.net/man/3/getch获取更多详细信息。如果在线编译器在Linux下运行,并获取了ncurses库,那么它就可以工作!
- Liroo Pierre5那么,在使用Linux时,我可以在这个程序中使用哪些适当的命令来替换getch()呢? - Tannia如果您的编译器上有ncurses库,getch将返回一个整数,所以您可以尝试
int key;
key = getch();
key将是表示ASCII字符的整数。
您也可以使用以下函数:keypad(stdscr,TRUE); 允许curses.h中的每个宏! - Liroo Pierre1在调用 curses 库之前未初始化它是不正确的... 而且这会为程序加载一个无意义的依赖项。最好使用 termios ioctls 进行迷你实现。 - Luis Colorado@LuisColorado 使用termios的问题在于,您将一个非标准功能(Windows的_getch函数)换成了另一个(POSIX termios系统)。 - Some programmer dude不是...你正在添加一个在其他架构中缺失的东西的存根实现。我并不建议使用相同的名称...我认为getch的使用是从TurboC程序中古老的一部分。但是使用ncurses实现并不是一个好主意,正如有时候建议的那样。 - Luis Colorado回答链接00这个函数在conio.h库中。因此我认为您只需要添加这一行代码:
#include
注意: conio.h 是特定于平台的。
- markoj回答链接00我也有同样的问题。
但是使用_getche()而不是getch()解决了我的问题。
- Habib回答链接00getchar()可能会解决你的问题。
- sri22你好,请详细说明为什么您认为getchar()可以解决作者的问题,并提供参考资料,以便回答更有益。 - Ishay Peled这个答案基本上是重复的,因为在顶部答案中已经提到了。 - General Grievance回答链接网页内容由stack overflow 提供, 点击上面的可以查看英文原文,