linux上getch()出有关问题了

linux下getch()出问题了
我在linux下编写如下代码段:
#include <curses.h>
#include <stdio.h>
int
main(void)
 {
  char ch;
  printf("Input a char:");
  ch = getch();
  printf("\nYou input a %c\n", ch);
  return 0;
 }
利用gcc -o testgetch testgetch.c -lcurses编译后无错,运行,并没有出现等待输入字符的情况,而是程序直接运行结束,网上也没找到出现这种情况的原因,望高手指教。
这就是运行状况:(运行后我没按任何键就变成这模样了)
[smellybb@localhost mycat]$ ./testgetch 
Input a char:
You input a �
[smellybb@localhost mycat]$
gdb调试的结果是ch值为-1,感觉程序压根就没执行getch(),实在是理解不上去了……

------解决方案--------------------
都使用curse了

无法使用console的东西了

至少我没这么干过
------解决方案--------------------
你用:

#include<stdio.h>
#include<conio.h>

int 
main(void) 

char in; 
printf("Input a char:"); 

fflush(stdin); 
in = getchar(); 

printf("\nYou input a %c\n", in ); 

getch(); /*等待输入任一键*/ 

return 0; 




------解决方案--------------------
C/C++ code
#include  <curses.h>
#include  <stdio.h>
int
main(void)
 {
     char ch;
     printf("Input a char:");
     ch = getchar(); 
     printf("\nYou input a %c\n", ch);
     return 0;
 }

------解决方案--------------------
<curses.h>
它的问题,我记得它有自已的输入输出函数,并且屏闭了<stdio.h>中的I/O函数
------解决方案--------------------
C/C++ code

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

int main(void)
{
        char ch;
        printf("Input a char: ");
        initscr();
        cbreak();
        noecho();
        ch = getch();
        endwin();
        printf("You input a %c\n", ch);

        return 0;
}

建议man ncurses

------解决方案--------------------
C/C++ code

getch()是个不可移植的函数,可以自己模拟出来一个。测试代码如下:
[root@cv0005759d1 stack]# cat testgetch.c 
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <assert.h>
#include <string.h>

int getch(void);

int main(void)
{
        char ch;       
        printf("Input a char:");
        fflush(stdin);
        ch = getch();
        printf("\nYou input a %c\n", ch);
        return 0;
}

int getch(void) 
{
        int c=0;
        struct termios org_opts, new_opts;
        int res=0;
        //-----  store old settings -----------
        res=tcgetattr(STDIN_FILENO, &org_opts);
        assert(res==0);
        //---- set new terminal parms --------
        memcpy(&new_opts, &org_opts, sizeof(new_opts));
        new_opts.c_lflag &= ~(ICANON | ECHO | ECHOE | ECHOK | ECHONL | ECHOPRT | ECHOKE | ICRNL);
        tcsetattr(STDIN_FILENO, TCSANOW, &new_opts);
        c=getchar();
            //------  restore old settings ---------
        res=tcsetattr(STDIN_FILENO, TCSANOW, &org_opts);assert(res==0);
        return c;
}

[root@cv0005759d1 stack]# gcc testgetch.c -o testgetch
[root@cv0005759d1 stack]# ./testgetch 
Input a char:
You input a k
[root@cv0005759d1 stack]#