C语言scanf连续输入两个字符

C语言scanf函数连续输入两个字符出现的问题
上代码

//初始代码,输入1,2,a,b,每次输入按了一次回车
int a,b;
char c,d;
scanf("%d%d",&a&b);
scanf("%c%c",%c&d);
printf("%d\n%d\n",a,b);
printf("%c\n%c",c,d);
//预期输出1,2,a,b
//结果输出
1
2
a

//上一行不是没有,是一个回车字符

根本原因:
scanf函数是从标准缓冲区读取字符的,由于每次输入之后都按了一次回车,标准缓冲区记录了这次回车,而char类型会记录这个回车,并赋值给了变量d

解决方案一
通过fflush(stdin);清除标准缓冲区,上代码

int a,b;
char c,d;
scanf("%d%d",&a&b);
fflush(stdio);
scanf("%c",%c);
fflush(stdio);
scanf("%c",&d);
printf("%d\n%d\n",a,b);
printf("%c\n%c",c,d);
//得到预期结果

解决方案二(推荐)
在%c前面加个空格,空格可抵消前面输入的回车符,上代码

int a,b;
char c,d;
scanf("%d%d",&a&b);
scanf(" %c",%c);
scanf(" %c",&d);
printf("%d\n%d\n",a,b);
printf("%c\n%c",c,d);
//得到预期结果

解决方案三
多设置一个变量来吸收前面的回车字符

int a,b;
char c,d,e;
scanf("%d%d",&a&b);
scanf("%c",&c);
scanf("%c",&d);
scanf("%c",&e);
printf("%d\n%d\n",a,b);
printf("%c\n%c",c,e);
//得到预期结果
  • 31
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值