2017-07-31 40 views
-1

我已經在Linux mint中安裝了ncurses庫,但我仍然不能在中使用getch函數。我正在使用Linux mint 18.2。如何在Linux中使用c的getch函數?

這裏是我的程序:

#include <stdio.h> 
#include <curses.h> 

int main() { 
    char k; 
    printf("how are you"); 

    k = getch(); 
    printf("%c",k); 
} 

這裏是輸出:

[email protected]$ gcc-7 test.c -lcurses 
[email protected]$ ./a.out 
how are you�[email protected]$ 

但這並沒有等我按任意鍵並迅速終止。我不想爲Linux安裝conio.h。我如何在Linux中使用getchgetche函數?請不要告訴我做我自己的功能。我仍然是一個noob。或者必須有替代品。

+1

'getch()'只有在初始化curses後定義了行爲。谷歌至少在'initscr()'和'endwin()'。 –

+1

順便說一句,你不能混合'stdio'函數和'curses'函數。 –

+0

更重要的是:爲什麼?你想達到什麼目的?從目前的問題陳述來看,它看起來並不像你需要任何東西的ncurses。所以? –

回答

3

這裏有一個「修正版」,解釋什麼是錯的評論:

#include <curses.h> 
#include <stdio.h> 

int main(void) 
{ 
    // use the correct type, see https://linux.die.net/man/3/getch 
    int k; 

    // init curses: 
    initscr(); 

    // in curses, you have to use curses functions for all terminal I/O 
    addstr("How are you?"); 

    k = getch(); 

    // end curses: 
    endwin(); 

    printf("You entered %c\n", k); 

    return 0; 
} 

這仍然是不好的代碼,你至少應該檢查是否從getch()得到了有效的字符。

重要的是要注意getch()不是「C的函數」。它是curses的一部分,它是用於控制檯/終端控制的衆所周知的與平臺無關的API,其實現例如* nix系統(ncurses)和Windows(pdcurses)。它是而不是語言C的一部分。