连续scanf输入字符型数据时,出现跳过输入问题

 

当连续两次scanf输入字符型数据时第二个scanf会被跳过。

例:

#include <stdio.h>
main(){
	char A,B;
	scanf("%c",&A);
	scanf("%c",&B);
	printf("A=%c\tB=%c",A,B);
    return 0;
}
  • 原因:输入第一个字符时,回车键enter被保留在键盘缓冲区,被第二个scanf接收,导致第二个scanf无法被输入。

解决方法:

通过添加fflush(stdin)来清空键盘缓冲区。

#include <stdio.h>
main(){
	char A,B;
	scanf("%c",&A);
	fflush(stdin);
	scanf("%c",&B);
	printf("A=%c\tB=%c",A,B);
	return 0;
}

或者通过添加getchar()来临时接收回车enter

#include <stdio.h>
main(){
	char A,B;
	scanf("%c",&A);
	getchar();
	scanf("%c",&B);
	printf("A=%c\tB=%c",A,B);
	return 0;
}

 

总结:sacnf函数接收输入数据时,遇见以下三种情况结束一个数据当输入:遇空格,回车,跳格键;遇宽度格式修饰符;遇非法输入,键盘缓冲区就可能有残余信息问题。ffush(stdin)的功能时清空输入缓冲区,通常是为了确保不影响后面的数据读取。例如,在scanf()读取一个数据n后,紧接着又要读取一个字符或字符串,此时应该先执行ffush(stdin)

 

 

【1】祁文青 刘志远 冯运仿 C语言程序设计 【M】1版.北京 :机械工业出版社,2018.8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值