C语言中scanf()怎么解决输入缓冲区残留‘/n’的问题

scanf作为我们作为我们刚接触c语言时的欢乐源泉,慢慢学习才发现自己在处理问题时发现自己基础很不牢固

解决’\n’问题

这个问题之前我一直没有注意,知道昨天突发奇想在oj上做了几道题
里面用到了scanf(“%c”,&a);于是就出问题了,懵逼了,于是自己调试,在网上找解决方法
找了半天发现是缓冲区残留’\n’的问题
一般多步骤调用scanf函数(里面有scanf(“%c”,&a))中会出现这个问题
先上代码举例子

#include<stdio.h>
int main()
{
	char a,b,c;
	while(scanf("%c%c%c",&a,&b,&c)!=EOF)
	{
	    //fflush(stdin);
		//rewind(stdin);
		printf("%c %c %c\n",a,b,c);
		//rewind(stdin);
		//fflush(stdin);
    }
	return 0;
	
}

运行结果:
asd
a s d
qwe

q w
e

解决方法

1.(scanf("%c%c%c",&a,&b,&c)!=EOF)在’%‘前面加空格—>(scanf(" %c%c%c",&a,&b,&c)!=EOF)
2.(scanf("%c%c%c*%*c",&a,&b,&c)!=EOF)//在末尾加%*c----->把\n直接略去
3.fflush(stdin);在–printf上下加入此语句直接把’\n’清空
4.rewind(stdin);在–printf上下加入此语句

fflush(stdin)

fflush(stdin)是一个计算机专业术语,功能是清空输入缓冲区,通常是为了确保不影响后面的数据读取(例如在读完一个字符串后紧接着又要读取一个字符,此时应该先执行fflush(stdin);

rewind(stdin)

rewind(stdin)清除标准输入的按键缓冲区。效果与fflush(stdin)相同
欢迎大家留下自己的新发现

发布了22 篇原创文章 · 获赞 17 · 访问量 1152

猜你喜欢

转载自blog.csdn.net/qq_45803800/article/details/104307062