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;
while(fflush(stdin),(ret=scanf("%d",&i))!=EOF)
{
printf("i = %d\n",i);
}
system("pause");
}