#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有缓冲,不是实时显示的。
问题在于printf有缓冲,不是实时显示的。
#3
我试过了,还是会出现参数错误,应该不是这个原因。
#4
单步调试和设断点调试是程序员必须掌握的技能之一。
#5
getch()是在头文件conio.h里的,而linux里没这个头文件,不能实现这个功能,另找办法吧
#6
试试getchar
#1
把所有的printf都换成printw
#2
其实getch是实时的处理,比如你按了Y就不用按回车,直接可以退出。
问题在于printf有缓冲,不是实时显示的。
问题在于printf有缓冲,不是实时显示的。
#3
我试过了,还是会出现参数错误,应该不是这个原因。
#4
单步调试和设断点调试是程序员必须掌握的技能之一。
#5
getch()是在头文件conio.h里的,而linux里没这个头文件,不能实现这个功能,另找办法吧
#6
试试getchar