C语言scanf输入时缓冲区问题

许多同学可能在写代码时都遇到了关于scanf输入时缓冲区读取问题。
首先来对scanf为什么会出现这类问题进行分析,scanf函数是标准输入流(从键盘接收数据),接收的数据放入输入缓冲区中,其中就包括在键盘输入的空格、回车这类字符,当你用%d接收时是不会影响的,但是用%c就会产生错误,这是因为在"%c"输入时,空格和转义字符均作为有效字符会被%c接收。
例如:

#include<stdio.h>
int main()
{
	char a, b, c;
	scanf("%c%c%c", &a, &b, &c);
	printf("%c,%c,%c\n", a, b, c);
	system("pause");
	return 0;
}

在这里插入图片描述

解决这类问题的方法:

1.在接收第二个数之前清空缓冲区,fflush(stdin);getch();getchar();随便一个都可以,fflush(stdin)是全部清空,getchar()是清空一个字符,如果缓冲区还有多余的字符则会被正常使用,
2.在%c之前加入空格,空格可以吸收回车符、空格。

如果是在循环中多个scanf输入多个字符,建议使用",“进行隔开,并且在键盘输入的时候也要使用”,"

猜你喜欢

转载自blog.csdn.net/qq_39032310/article/details/83692746