c语言中的scanf是从输入缓冲读取数据到变量中,而我们输入字符时很容易受缓冲区的影响
比如下面的例子
char c = 0;
char a = 0;
scanf("%c", &c);
scanf("%c", &a);
printf("%c,%c",a,c);
可以看到我输了一个1并按了回车以后,第二个scanf直接从缓冲区读了个‘\n’;
所以为了消除输入字符时缓冲区中剩余字符的影响,我们可以先清除缓冲区。
我介绍两种方法
第一种
while ((t = getchar()) != '\n' && t != EOF);
实例
char t=0;
char c = 0;
char a = 0;
scanf("%c", &c);
while ((t = getchar()) != '\n' && t != EOF);
scanf("%c", &a);
printf("%c,%c",a,c);
第二种
setbuf(stdin, NULL);
头文件为<stdio.h>
实例
char c = 0;
char a = 0;
scanf("%c", &c);
setbuf(stdin, NULL);
scanf("%c", &a);
printf("%c,%c",a,c);