fflush(stdin)的使用方法到底是怎样的?

HZChang 2011-06-20 12:02:12
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
void sru(char *s,int n);
char *substr(char *s,int startloc,int len);
void main()
{
int n;
int a,b;
char *s;
printf("input n:");
scanf("%d",&n);
fflush(stdin);
s=(char *)malloc((n+1)*sizeof(char));
if(s==NULL)
{
printf("Insuffficient memory available");
exit (0);
}
printf("input n nums:");
sru(s,n);
printf("input a:");
scanf("%d",&a);
printf("input b:");
scanf("%d",&b);
while(b<a||a>n)
{
printf("please input again\n");
printf("input a:");
scanf("%d",&a);
printf("input b:");
scanf("%d",&b);
}
printf("%s",substr(s,a,b));
free(s);
}
void sru(char *s,int n)
{
int i;
for(i=0;i<n;i++)
scanf("%c",s+i);
}
char *substr(char *s,int startloc,int len)
{
static char str[100];
int i;
*(str)=*(s+startloc);
for(i=1;i<len;i++)
*(str+i)=*(s+i+startloc);
str[i]='\0';
return(str);
}
这个程序如果缺少fflush(stdin)结果也会发生变化,这个函数一般不是用在gets后面的吗?
...全文
700 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengskill 2011-07-13
  • 打赏
  • 举报
回复
楼主,你的程序为什么运行时输入正确值时,不能按正常程序直接输出结果。非得返回输入错误的循环啊。还有当我输入b<a的错误结果时,输出的是乱码。还有个问题是我第一遍不能单独输入a,b;应该怎么改才能单独输入a,b。比如,请输入a:4\n 请输入b:7\n。
stein42 2011-06-20
  • 打赏
  • 举报
回复
这个是未定义的行为,最好不要用。
赵4老师 2011-06-20
  • 打赏
  • 举报
回复
在每句scanf("%c",...);之前用即可.
就想叫yoko 2011-06-20
  • 打赏
  • 举报
回复
fflush(stdin)
刷新输入缓冲区的内容
打开下面链接,直接免费下载资源: https://renmaiwang.cn/s/ska3s C语言清空输入缓冲区在标准输入(stdin)情况下的使用C语言中,输入缓冲区是指标准输入(stdin)中的缓冲区,当用户输入数据时,数据会先存储在缓冲区中,然后再被读取和处理。但是,如果不正确地清空输入缓冲区,可能会导致程序出现问题。因此,本文将介绍C语言清空输入缓冲区在标准输入(stdin)情况下的使用。在C语言中,有多种方法可以清空输入缓冲区。第一种方法使用fflush函数,该函数可以清空缓冲区,但是这种方法容易出错,不建议使用。第二种方法使用scanf函数来读取缓冲区中的数据,但是这种方法也容易失效。第三种方法使用setbuf函数,该函数可以使stdin输入流由默认缓冲区转为无缓冲区,但是这种方法也不能完美地清空缓冲区。一种可行的方法使用getchar函数来清空缓冲区,该函数可以不断地获取缓冲中字符,直到获取的字符是“\n”或文件结尾符EOF为止。这种方法可以完美地清空输入缓冲区,并具备可移植性。在程序1中,我们可以看到,输入一个数字,然后输入一个字符,但是直接输出了“hello bit”,这是因为在点击回车(‘\n’)时,相当于输入了一个字符,那么我们需要进行清空缓冲区处理。在程序2中,我们使用了fflush函数来清空缓冲区,但是这种方法容易出错,不建议使用。在程序3中,我们使用了getchar函数来清空缓冲区,这种方法可以完美地清空输入缓冲区,并具备可移植性。C语言中清空输入缓冲区的方法有多种,但是使用getchar函数来清空缓冲区是最可靠和最可移植的方法。知识点:* 输入缓冲区是指标准输入(stdin)中的缓冲区* 清空输入缓冲区是指清空缓冲区中的数据* 使用fflush函数清空缓冲区容易出错,不建议使用* 使用scanf函数清空缓冲区容易失效* 使用setbu

33,318

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧