求助getch()函数问题!

时间:2020-12-18 16:16:47
#inclue "stdio.h"
void main()
{char i;
   while((i=getch())!='y')
         { switch(i)
               { case 'T':printf("Please input the second character:");
if((i=getch())=='u')
  printf("Tuesday");
  else if((i=getch())=='h')
           printf("Thursday");
  else
        printf("Data Error");
        break;                        
      case 'M':printf("Monday");break;
     }
    }
}
这是一个根据输入的字母判断星期几的程序,这里只给出了判断周一和周二周四部分。很奇怪的是,输入T时,继续判断,当输入u时,很快就能给出Tuesday的结果,而输入h时,无反映,要再次输入遍h才会判断为Thursday。我把getch()换成getche()后观察结果,发现第一个h的确输入了,但是不判断。程序跳过T后第一个h,对后面的字母进行判断,不知道为什么,请高手解惑!

7 个解决方案

#1


请注意在接收输入时,要有一个字符把回车换行符吸收掉,要不然在第二次循环时回车换行符也会传给变量i,就会判断不正确。

#2


请使用getchar()代替getch

#3


getch getche getchar的区别和缓冲区的概念
自己百度一下

#4


我这里是无回显输入字符,所以用getch()。并且是输入一个字母后立刻返回赋值给变量i并进行判断,最多连续判断两个字母并显示,最后接收到字母y结束。这里没有用到缓存区的概念,楼上几位没有答上要点,getch(),getche(),getchar()的区别已经百度过了,前者是无回显无缓存即刻返回值,中者是有回显,后者是有回显并且是从缓存区中传递值。但是我这里出现的问题确实诡异,请大家试试再回答下啊!

#5


是你程序的问题,不是getch的问题

  else if(i=='h') //把getch()去掉
  printf("Thursday");

#6


//#inclue "stdio.h"
#include "stdio.h"
void main()
{
char i;
   while((i=getch())!='y')
   { 
rewind(stdin);  //清空键盘缓冲
switch(i)
   { 
case 'T':printf("Please input the second character:");
if((i=getch())=='u')
   printf("Tuesday\n");
   //else if((i=getch())=='h')
else if(i == 'h')
   printf("Thursday\n");
   else
   printf("Data Error\n");
   break;   
   case 'M':printf("Monday\n");break;
   }
rewind(stdin);
   }
}

#7


谢谢各位,我觉得可能5楼说的很对,6楼的方法我会去尝试的!

#1


请注意在接收输入时,要有一个字符把回车换行符吸收掉,要不然在第二次循环时回车换行符也会传给变量i,就会判断不正确。

#2


请使用getchar()代替getch

#3


getch getche getchar的区别和缓冲区的概念
自己百度一下

#4


我这里是无回显输入字符,所以用getch()。并且是输入一个字母后立刻返回赋值给变量i并进行判断,最多连续判断两个字母并显示,最后接收到字母y结束。这里没有用到缓存区的概念,楼上几位没有答上要点,getch(),getche(),getchar()的区别已经百度过了,前者是无回显无缓存即刻返回值,中者是有回显,后者是有回显并且是从缓存区中传递值。但是我这里出现的问题确实诡异,请大家试试再回答下啊!

#5


是你程序的问题,不是getch的问题

  else if(i=='h') //把getch()去掉
  printf("Thursday");

#6


//#inclue "stdio.h"
#include "stdio.h"
void main()
{
char i;
   while((i=getch())!='y')
   { 
rewind(stdin);  //清空键盘缓冲
switch(i)
   { 
case 'T':printf("Please input the second character:");
if((i=getch())=='u')
   printf("Tuesday\n");
   //else if((i=getch())=='h')
else if(i == 'h')
   printf("Thursday\n");
   else
   printf("Data Error\n");
   break;   
   case 'M':printf("Monday\n");break;
   }
rewind(stdin);
   }
}

#7


谢谢各位,我觉得可能5楼说的很对,6楼的方法我会去尝试的!