这几天在做一个程序,功能是:输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。(用Dev-C++编译)
代码如下:
/************************************************************
题目:请输入星期几的第一个字母来判断一下是星期几,
如果第一个字母一样,则继续判断第二个字母,按 E退出。
Monday Tuesday Wednesday Thursday Friday Saturday Sunday
************************************************************/
#include
#include
int main()
{
char letter;
printf("输入第一个字母:");
while((letter=getchar())!='E') //按 E退出
{
switch(letter)
{
case 'M': printf("你输入的是星期一\n");break;
case 'T': printf("请输入第二个字母:");
if((letter=getchar())=='u')
{printf("你输入的是星期二\n");break;}
else if((letter=getchar())=='h')
{printf("你输入的是星期四\n");break;}
else {printf("输入的数据错误\n");break;}
case 'W': printf("你输入的是星期三\n");break;
case 'F': printf("你输入的是星期五\n");break;
case 'S': printf("请输入第二个字母:");
if((letter=getchar())=='a')
{printf("你输入的是星期六\n");break;}
else if ((letter=getchar())=='u')
{printf("你输入的是星期日\n");break;}
else {printf("输入的数据错误\n");break;}
default: printf("输入的数据错误\n");break;
}
}
system("pause");
}
上面的代码一直得不到理想的结果,特别是当第一个字母重复的时候,其中肯定有一个运行结果是错误的,郁闷................
而且上面的代码还是网上的《经典C语言程序设计100例》里面差不多的代码!
想了一下,可能是getchar()的问题,查了一下函数的功能:
函数名: getchar
功 能: 从stdin流中读字符
用 法: int getchar(void);
注解:
getchar有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕.如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键.
如果stdin有数据,则直接读取最前面的一个字符(读取完函数就结束,不等什么回车)。
getchar函数有回显功能,即读入一个字符,马上在屏幕上显示。
感觉问题就出在键盘缓存区.............
有待进一步解决~~
阅读(1822) | 评论(1) | 转发(0) |