Chinaunix首页 | 论坛 | 博客
  • 博客访问: 88128
  • 博文数量: 19
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 226
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-14 13:01
文章分类

全部博文(19)

文章存档

2008年(19)

我的朋友

分类: C/C++

2008-06-10 17:55:56

这几天在做一个程序,功能是:输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续  判断第二个字母。(用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) |
给主人留下些什么吧!~~

vmoon2008-06-15 21:20:02

修改为以下代码试试。 #include #include int main() { char letter; printf("输入第一个字母:"); while((letter=getchar())!='E') //按 E退出 { getchar(); switch(letter) { case 'M': printf("你输入的是星期一\n");break; case 'T': printf("请输入第二个字母:"); letter=getchar(); getchar(); if(letter=='u') {printf