输入星期几的第一个字母来判断是星期几,如果第一个字母一样,则继续判断第二个

本文解析了如何修复《C语言程序设计教程》中的一道题目,涉及到使用scanf和getchar时的输入错误。通过理解缓冲区原理,提出在获取第一个字母后加入getchar清除回车,确保后续输入的准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目场景:

输入星期几的第一个字母来判断是星期几,如果第一个字母一样,则继续判断第二个

这是人民邮电出版社王曙燕编写的《C语言程序设计教程》中第四章《选择程序分支结构程序设计》中的一道例题,P72-74。

问题描述

源代码如下:
在这里插入图片描述
开发环境:win10操作系统+VC6.0
在输入大写字母S或T后,再输入第二个字母a/u或者u/h时,运行结果是“数据有错!”,得不到正确的结果。

原因分析:

scanf和getchar都从输入缓冲区中获取输入,用回车来结束。但是结束时,回车依然留在缓冲区中,会被下一次获取输入的getchar获取,从而造成错误。


解决方案:

在第一次scanf执行后,加一个getchar(),将缓冲区里的回车跳过。
在第二次获取输入时,只使用一次letter=getchar();后面的判断用letter做判断。
代码如下:
#include <stdio.h>
main()
{ char letter;
printf(“请输入某一天的第一个字母:(S/F/M/T/W)\n”);
scanf(“%c”,&letter);
getchar();
switch (letter)
{
case ‘S’: printf(“请输入第二个字母:(a/u)\n”);
{
letter=getchar();
if(letter==‘a’)

					printf("星期六(Saturday)\n");
		
              else if (letter=='u')
		
					
					printf("星期天(Sunday)\n");
			
              else printf("数据有错!\n");

		   }
              
              break;
       case 'F':printf("星期五(Friday)\n");break;
       case 'M':printf("星期一(Monday)\n");break;
       case 'T':printf("请输入第二个字母:(u/h)\n");
			{
				letter=getchar();
				if(letter=='u')
		 		   printf("星期二(Tuesday)\n");
		            
				else if(letter=='h')			   
			  
			       printf("星期四(Thursday)\n");
		 
				else printf("数据有错!\n");
             }
			break;
		case 'W':printf("星期三(Wednesday)\n");break;
        default: printf("数据有错!\n");
  }

}
初学者尽量避免滥用getchar(),以免造成错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值