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后面的吗?
...全文
593 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)
刷新输入缓冲区的内容
实验一 处理机调度 一、实验内容 选择一个调度算法,实现处理机调度。 二、实验目的 多道系统中,当就绪进程数大于处理机数时,须按照某种策略决定哪些进程优先占用处理机。本实验模拟实现处理机调度,以加深了解处理机调度的工作。 三、实验题目 1、设计一个按优先权调度算法实现处理机调度的程序; 2、设计按时间片轮转实现处理机调度的程序。 PCB内容要求 : 进程名/PID; 要求运行时间(单位时间); 优先权; 状态: PCB指针; 1、可随机输入若干进程,并按优先权排序; 2、从就绪队首选进程运行:优先权-1 要求运行时间-1 要求运行时间=0时,撤销该进程 3、重新排序,进行下轮调度; 源代码: #include #include 实验一-处理机调度实验报告全文共9页,当前为第1页。#include 实验一-处理机调度实验报告全文共9页,当前为第1页。 #include typedef struct pcb { char PID[50]; int needTime;//需要运行时间 int priority;//优先权 char state[20];//进程状态 struct pcb *next; }PCB; typedef struct { PCB* front; PCB* rear; }ProcessQueue; void SelectAlgorithm(); void CreateQProcess(ProcessQueue &Q,char*,int time,int pri,char*); void ProcessSchedule(); void InitQueue(ProcessQueue &Q); void visitQueue(ProcessQueue &Q); bool RunProcess(PCB* rp,ProcessQueue &Q); bool NonPreemptivePriority(ProcessQueue &Q);//非抢占式优先权调度 void delProcess(PCB* delp); bool RunProcessPreem(PCB* rp,ProcessQueue &Q);//抢占式优先执行进程 bool PreemptivePriority(ProcessQueue &Q); void RR(ProcessQueue &Q); int main() { int iSel; int i = 0; SelectAlgorithm(); ProcessQueue readyQ;//就绪进程队列 PCB newpcb; InitQueue(readyQ); printf("请选择调度算法:"); do { scanf("%d",&iSel); } while (!(iSel == 1 "" iSel == 2 "" iSel == 3)); while(i < 3) { 实验一-处理机调度实验报告全文共9页,当前为第2页。 printf("请输入要创建的进程:\n"); 实验一-处理机调度实验报告全文共9页,当前为第2页。 fflush(stdin); gets(newpcb.PID);fflush(stdin); scanf("%d",&newpcb.needTime);fflush(stdin); scanf("%d",&newpcb.priority);fflush(stdin); gets(newpcb.state);fflush(stdin); CreateQProcess(readyQ,newpcb.PID,newpcb.needTime,newpcb.priority,newpcb.state); printf("创建了一个进程\n"); ++i; } visitQueue(readyQ);//显示的是各个进程的优先权 switch(iSel) { case 1: while(NonPreemptivePriority(readyQ));//非抢占优先权调度 break; case 2: PreemptivePriority(readyQ);//抢占式优先权调度 break; case 3: RR(readyQ); break; } return 0; } void SelectAlgorithm() { printf("1.非抢占式优先权调度\n"); printf("2.抢占式优先权调度\n"); printf("3.时间片轮转调度\n"); } void InitQueue(ProcessQueue &Q)//初始化进程队列 { Q.front = Q.rear = (PCB*)mallo
#include #include #include typedef struct { char number[10];//书号 char name[20];//书名 char author[20];//作者 char publish[50];//出版社 char time[20];//出版时间 float price; }mbook; typedef struct { int count;//书的本数 mbook book[100];//最大可有100本书 }mlibrary; mlibrary library; void save()//保存图书信息。 { FILE *fp; if((fp=fopen("library.doc","w"))==NULL) { printf("\n不能保存图书信息\n"); return; } fwrite(&library.count,sizeof(int),1,fp); fwrite(library.book,sizeof(library.book[0]),library.count,fp); } void putin() /*定义录入函数*/ { int y=1; system("cls"); while(y) { printf("\t请输入您的书籍的书号:"); scanf("%s",library.book[library.count].number); printf("\t请输入书名:"); scanf("%s",library.book[library.count].name); printf("\t请输入作者名:"); scanf("%s",library.book[library.count].author); printf("\t请输入出版社:"); scanf("%s",library.book[library.count].publish); printf("\t请输入出版时间:"); scanf("%s",library.book[library.count].time); printf("\t请输入该书的价格:"); fflush(stdin); scanf("%f",&library.book[library.count].price); library.count++; printf("\n是否继续录入(1.继续;0,退出录入):"); fflush(stdin); scanf("%d",&y); if (y!=1) { y=0; break; } } save(); } void lookup() { system("cls"); printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n"); int i ; for ( i=0;iflush(stdin); getchar(); } void search_by_name() /*定义按书名查询*/ { char s2[20]; int flag=1; printf("\n请输入要查询的书名: "); fflush(stdin); scanf("%s",s2); printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n"); int i ; for( i=0;iflush(stdin); getchar(); } void search_by_author() /*定义按作者名查询*/ { char s3[20]; int flag=1; printf("请输入要查询的书的作者: "); fflush(stdin); scanf("%s",s3); printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n"); int i ; for( i=0;iflush(stdin); getchar(); } void search() /*定义查询函数*/ { int a; system("cls"); /*进行清屏*/ printf("\t\t******************************\n"); printf("开始查询\n"); printf("\t\t\t1---------------search_by_name\n"); printf("\t\t\t2---------------search_by_writer\n"); printf("\t\t\t0---------------exit\n"); printf("\t\t******************************\n") ; printf("\t\t请选择你想要的查询方式:"); fflush(stdin); scanf("%d",&a); switch(a) { case 1: search_by_name(); break; case 2: search_by_author(); break; case 0: return; } } void del() /*定义删除函数*/ { char number[10]; system("cls"); /*清屏*/ printf("\n Please type in the number of the book you want to delete:"); fflush(stdin); scanf("%s",number); int i; for (i=0;iflush(stdin); getchar(); } void update()//修改图书信息 { char number[10]; system("cls"); /*清屏*/ printf("\n Please type in the number of the book you want to delete:"); fflush(stdin); scanf("%s",number); int i; for (i=0;iflush(stdin); scanf("%f",&book.price); strcpy(library.book[i].name,book.name); strcpy(library.book[i].number,book.number); strcpy(library.book[i].publish,book.publish); strcpy(library.book[i].author,book.author); strcpy(library.book[i].time,book.time); library.book[i].price=book.price; save(); } else printf("\n cannot found!\n"); fflush(stdin); getchar(); } void main() { FILE *fp; if((fp=fopen("library.doc","r"))==NULL) { printf("\n不能打开图书信息库\n"); fp=fopen("library.doc","w+"); printf("\n初始化图书信息库,初始化之后要重启程序\n"); library.count=0; fwrite(&library.count,sizeof(int),1,fp); fclose(fp); return; } fread(&library.count,sizeof(int),1,fp); fread(library.book,sizeof(library.book[0]),library.count,fp); fclose(fp); int a; do { system("cls"); printf("\n\n\n\n\n\t\t\t\t图书信息管理系统\t\t\t\t\n"); printf("\t\t*********************************************\n"); printf("\t\t\t1 ------------------图书信息录入\n"); printf("\t\t\t2 ------------------图书信息浏览\n"); printf("\t\t\t3 ------------------图书信息查询\n"); printf("\t\t\t4 ------------------图书信息删除\n"); printf("\t\t\t5 ------------------图书信息修改\n"); printf("\t\t\t0 -----------------退出图书信息系统\n"); printf("\t\t*********************************************\n"); printf("\t\tPlease Enter Choose: "); fflush(stdin); scanf("%d",&a); switch(a) { case 1: putin(); break; case 2: lookup(); break; case 3: search(); break; case 4: del(); break; case 5: update(); break; case 0: printf("\n\n退出\n\n"); break; default: printf("\n序号不对\n"); } }while(a!=0); save(); }

33,311

社区成员

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

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