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");
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);
}
}
#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");
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);
}
}
#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楼的方法我会去尝试的!