Linux环境下使用getch函数的问题

时间:2021-06-28 16:15:47

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

int main(void)
{
 int letter,p;
 printf("please input the first letter of someday.\n");
 initscr();               
 while ((letter=getch())!='Y')
 {
 switch (letter){
  case 'S':{
  printf("please input second letter\n");
              refresh(); 
          if((p=getch())=='a')
          {printf("saturday\n");break;}
          if (p=='u')
          {printf("sunday\n");break;}
          else {printf("data error\n");break; }
          
          }
  case 'F':{printf("friday\n");break;}
  case 'M':{printf("monday\n");break;}
  case 'T':{printf("please input second letter\n");
               refresh(); 
           if((p=getch())=='u')
           {printf("tuesday\n");break;}
           if (p=='h')
           {printf("thursday\n");break;}
           else {printf("data error\n");break;}
           
          }
  case 'W':{printf("wednesday\n");break;}
  }
 }
endwin();
return 0;
}

这个程序的原本是输入星期的英文,第一个字母如果能查到返回结果,否则输入第二个字母(第一个字母大写,第二个小写),输入Y退出。
我查了一下,使用initscr和endwin括住了使用getch函数的部分,否则会出现segmentation fault的错误,但是还是有错。在case语句里又使用getch函数时不是实时的处理,而需要回车。求高人指点。

6 个解决方案

#1


把所有的printf都换成printw

#2


其实getch是实时的处理,比如你按了Y就不用按回车,直接可以退出。
问题在于printf有缓冲,不是实时显示的。

#3


引用 2 楼 *mill 的回复:
其实getch是实时的处理,比如你按了Y就不用按回车,直接可以退出。
问题在于printf有缓冲,不是实时显示的。

我试过了,还是会出现参数错误,应该不是这个原因。

#4


单步调试和设断点调试是程序员必须掌握的技能之一。

#5


getch()是在头文件conio.h里的,而linux里没这个头文件,不能实现这个功能,另找办法吧

#6


试试getchar

#1


把所有的printf都换成printw

#2


其实getch是实时的处理,比如你按了Y就不用按回车,直接可以退出。
问题在于printf有缓冲,不是实时显示的。

#3


引用 2 楼 *mill 的回复:
其实getch是实时的处理,比如你按了Y就不用按回车,直接可以退出。
问题在于printf有缓冲,不是实时显示的。

我试过了,还是会出现参数错误,应该不是这个原因。

#4


单步调试和设断点调试是程序员必须掌握的技能之一。

#5


getch()是在头文件conio.h里的,而linux里没这个头文件,不能实现这个功能,另找办法吧

#6


试试getchar