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);
//得到预期结果