为什么使用getch()会显示错误?

为什么使用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 提供, 点击上面的可以查看英文原文,