2015-12-15 83 views
1
struct 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()爲什麼使用getch()顯示錯誤?

當我嘗試在網上的編譯器,我得到這個錯誤運行這段代碼的代碼部分: 未定義參考getch collect2:錯誤:1D返回1退出狀態

如何解決這個問題呢?...請幫助

回答

4

有一個在標準 C庫沒有getch功能,它只EXIS t,並且因爲它不是標準函數,所以它的真名是_getch(注意前導下劃線)。根據錯誤消息判斷,您的在線編譯器使用GCC,並且很可能在Linux環境中,因此沒有getch(或_getch)函數。

如果您想要便攜式使用fgetc or getc而不是getchar(但請注意,這些函數返回int)。

+1

更重要的是,在'ncurses'庫中有'getch()'函數可以達到同樣的效果,但是在不初始化的情況下調用'ncurses'是不正確的。 –

1

Linux中有一個殘培,但在庫

#include <ncurses/curses.h> 

更多細節見http://linux.die.net/man/3/getch。如果在線編譯器在Linux下工作,並獲得ncurses庫,這將是工作!

+0

那麼,在使用linux的這個程序中,我可以使用其他合適的命令來代替getch()嗎? – Tannia

+0

是的,如果你的編譯器有ncurses庫,getch會返回一個int,所以你可以試試 int key; key = getch(); 和鍵將是一個表示ASCII字符的int。 您可以使用功能:鍵盤(stdscr,TRUE);允許curses.h的每個宏! –

+1

調用curses庫而不初始化它是不正確的......並且它加載了一個不必要的依賴項,這是一個無意義的程序。使用'termios' ioctls來做一個小型實現會更好。 –