getchar吸收回车符

项目场景:

getchar吸收回车符

问题描述

#include <stdio.h>
int main()
{
int data;
char cdata;

puts("请输入一个整数:");

scanf("%d",&data);

switch(data){
	case 1:
	case 2:
	case 3:
		puts("满足了条件1,2,3的情况");
		break;
	case 4:
		puts("满足了条件4的情况");
		//break;
	case 5:
		puts("满足了条件5的情况");
		break;
	default:
		puts("其他非列表中的情况");
	
}


printf("请输入一个字符:\n");

scanf("%c",&cdata);

switch(cdata){
	case 'a':
		puts("满足条件a的情况");
		break;
	
	case 'b':
		puts("满足条件b的情况");
		break;
	
	default:
		puts("其他非列表中的情况");
	
}
return 0;

}
代码不停留,直接在输入一个整数执行完后就结束,第二个scanf扫描器没有与人进行交互

原因分析:

如上图代码所示,第一个puts函数提示输入整数后,scanf扫描器的到一个整数要按回车执行后面的代码,然后后面一个scanf扫描器要求输入一个字符,此时上面的的回车符就跑到下面的扫描器中去了,而没有实现我们原本想要输入的字符输入

解决方案:

#include <stdio.h>
int main()
{
int data;
char cdata;

puts("请输入一个整数:");

scanf("%d",&data);

switch(data){
	case 1:
	case 2:
	case 3:
		puts("满足了条件1,2,3的情况");
		break;
	case 4:
		puts("满足了条件4的情况");
		//break;
	case 5:
		puts("满足了条件5的情况");
		break;
	default:
		puts("其他非列表中的情况");
	
}


printf("请输入一个字符:\n");
getchar();//注意:要用一个getchar()来吸收回车符,防止回车符进入到scanf中导致程序不停留
scanf("%c",&cdata);

switch(cdata){
	case 'a':
		puts("满足条件a的情况");
		break;
	
	case 'b':
		puts("满足条件b的情况");
		break;
	
	default:
		puts("其他非列表中的情况");
	
}
return 0;

}

如代码图所示,在第二个scanf扫描器的前面加一个getchar函数用于吸收上面留下来得回车符,吸收之后就不影响我们后面代码的执行了

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值