(c语言)scanf函数缓冲区问题
*当我们输入完 1 2后按下回车键,输入缓冲区里存放着1 2 \n, 第一次scanf读走1给a,2给b,中间的空格丢弃,/*我们第一个scanf函数给a,b赋值1,2后,再用第二个函数给c赋值3结果输出的结果却只有a,b*/,发现缓冲区里还有\n,而且正好匹配% c,于是直接读走\n给c,故在输出c时读取的是\n*/printf("%d %d %c\n", a, b, c);// //这里用户输
·
#include<stdio.h>
int main() {
int a, b;
char c;
printf("输入两个整数");
scanf("%d %d", &a, &b);
printf("输入一个字符");
scanf("%c", &c);
printf("%d %d %c\n", a, b, c);
}
我们第一个scanf函数给a,b赋值1,2后,再用第二个函数给c赋值3结果输出的结果却只有a,b
这就是典型的scanf缓冲区问题
当我们输入完 1 2后按下回车键,输入缓冲区里存放着1 2 \n, 第一次scanf读走1给a,2给b,中间的空格丢弃,
此时第一句scanf已经读完。但是缓冲区里还留着一个\n,
当第二scanf读入时,首先检查缓冲区
,发现缓冲区里还有\n,而且正好匹配% c,于是直接读走\n给c,故在输出c时读取的是\n
解决方法一:使用scanf函数之后用getchar()函数把\n拿走,这样缓冲区里就清空了
#include<stdio.h>
int main() {
int a, b;
char c;
printf("输入两个整数");
scanf("%d %d", &a, &b);
printf("输入一个字符");
getchar(); //吃掉回车确认符
scanf("%c", &c);//这里用户输入一个字符
printf("%d %d %c\n", a, b, c);//结果没有问题
}
解决方法二:rewind(stdin)清除标准输入的按键缓冲区。rewind函数是把指定流的读写指针重新指向开头
#include<stdio.h>
int main() {
int a, b;
char c;
printf("输入两个整数");
scanf("%d %d", &a, &b);
printf("输入一个字符");
rewind(stdin);//是把文件指针回绕到文件起始处。
scanf("%c", &c);//这里用户输入一个字符
printf("%d %d %c\n", a, b, c);//结果没有问题
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐




所有评论(0)