C语言-scanf学习

这篇博客探讨了C语言中scanf函数的使用,特别是关于如何处理输入的空格和换行符。文章指出,使用%d或%f时,scanf会忽略 和空格,而其他类型则不会。为了解决这个问题,可以使用rewind(stdin)来清除缓冲区。此外,还介绍了C语言的三种缓冲类型:全缓冲、行缓冲和不带缓冲。在示例代码中,展示了如何避免因输入错误导致的无限循环问题,通过fflush(stdin)清除缓冲区。
摘要由CSDN通过智能技术生成

C语言类型

scanf函数

当使用%d作为进行取值的类型的时候,会忽略\n 空格 ,%f也是如此,而其他作为取值类型的时候则不会忽略\n 空格 而是会作为字符进行输入

当其他类型也需要忽略的时候,我们可以对缓冲区进行清除,从而达到忽略的效果

rewind(stdin);清除缓冲区空间

缓冲区

C语言的缓冲三特征

全缓冲 这种情况下,当填满标准I/O缓存后才进行实际I/O操作的时候。全缓冲的典型代表是对于磁盘文件的读写
行缓冲 在这种情况下,当在输入和输出中遇到换行符的时候,执行真正的I/O操作。这时,我们输入的字符先存放在缓冲区,等按下回车键换行的时候才进行实际的I/O操作。典型代表是标准输入和标准输出
不带缓冲 也就是不进行缓冲,标准出错情况stderr是典型代表,这使得出错信息可以直接尽快地显示出来

scanf循环读取

//这是错误示范
#include <stdio.h>
#include <stdlib.h>
int main()
{
	int i,ret;
	while((ret=scanf("%d",&i)!=EOF{
		printf("i = %d\n",i);
	}
	system("pause");
}
//如果当你输入的不是数字的时候,他将一直报错并且重复打印,因为错误的值一直存在于缓存区且一直被读取
//当你清除缓冲区缓存的时候,他将重新读取数据

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int i,ret;
	whilefflush(stdin),(ret=scanf("%d",&i))!=EOF{
		printf("i = %d\n",i);
	}
	system("pause");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值