关于fflush(stdin)

来源:百度知道 编辑:UC知道 时间:2024/06/09 03:30:45
#include<stdio.h>
#include<stdlib.h>
void main()
{
int num;
printf("please input numbers:");
scanf("%d",&num);

if(num <12)
return ;
char* array = (char*)malloc(num);
printf("please input cmd name:");
fflush(stdin);
for(int i=0;i <5;i++)
{
printf("\n%d\t",i);
scanf("%c",array+i);
fflush(stdin);
}

printf("please input content:");
for(i=5;i<num;i++)
{
scanf("%c ",array+i);
// fflush(stdin);//这个地方为什么就不用呢?
}

for(i=0; i<num;i++)
printf("%x ",array[i]);
printf("\n");
for(i=0;i<num;i++)
printf("%d ",array[i]);
free(array);
}
因为
for(i=5;i<num;i++)
{scanf("%c",array+i);}
这里是连续取字符,只要

因为
for(i=5;i<num;i++)
{scanf("%c",array+i);}
这里是连续取字符,只要你输入的num-5个字符,这个for循环就自运退出了,
形象地说,假如num为13,则执行到这个循环时输入abcdefghi按回车时,先接收a,并将b到i放入缓存中,此时,程序将自动接收num-5=8个字符,也就是a到h,同时将后面的输入舍弃.并将a到h分别存放在array[5]到array[12]中.
另外如果加了fflush(stdin)的话,此时输入abcdefghi时,程序将只接收输入a!并将剩下的b到i放入缓存,调用fflush则将缓存清除,程序等待用户输入剩下的字符,剩下的情况类似,也就是说要按五次回车,才能得到完整的输入!

还有头文件没有包含完。。
#include <string.h>
#include <stdio.h>
#include <conio.h>
#include <io.h>

就上面的你的补充。。
是这样的

%c每次只读取一个字符。。就是说回车之后他就不读了

比入说你输入12345
和1 2 3 4 5
这2次输入。。输入数组的值是变化了的。。、。
第一次的是12345
第二次则是1 2 3
了、。、。在字符输入的时候。。空格也是一个字符。。也就是说回车也是一个结束标志。。。

楼上的说法非常详细 搂主可以结贴了!

补充一下:
c语言中的输出输出函数分为回显不回显,缓存不缓存。一共四种类型。
回显就是你输入的字符是否能在屏幕上看到
缓存就是你输入的字符被暂时存入到系统缓存区。等全部输入完再读取。