TC2.0中循环语句中的字符输出问题

来源:百度知道 编辑:UC知道 时间:2024/06/20 02:39:30
#include "stdio.h"
void main()
{int i;
char ch;
float a,*s=&a;
struct userinf
{int num;char address[20];char hum[10];float last;float now;float yuer;}record[500];
FILE *fp;
fp=fopen("123.rec","wb");
if(fp==NULL)
{printf("shibai");
exit(0);}
for(i=0;;i++)
{printf("num\taddress\thum\tlast\tnow\tyuer\n");
scanf("%d %s %s %f %f %f",&record[i].num,record[i].address,record[i].hum,&record[i].last,&record[i].now,&record[i].yuer);
fwrite(&record[i],sizeof(struct userinf),1,fp);
printf("continue:(y/n)?\n");
printf("input c:");
scanf("%c",&ch);
if(ch=='n'||ch=='N')
break;
}
fclose(fp);
}
程序如上:
为什么运行时输入一组数据后的结果变成了
input c: num address hum last now yuer
它不是应该先执行:
printf("continue:(y/n)?\n");
printf(

这是因为在你打上一行数据后,回车确认后,这一行的数据就被输入出去了,但是回车没有被输入的,它还被保留在键盘的缓冲区里面,之后执行
printf("continue:(y/n)?\n");
printf("input c:");
scanf("%c",&ch);
这样这个 回车 就被输入到 ch 里面了,所以会
input c: num address hum last now yuer
把缓冲区清空就不会了,清空缓冲区用 fflush(stdin);
全部代码如下:
#include "stdio.h"
void main()
{int i;
char ch;
float a,*s=&a;
struct userinf
{int num;char address[20];char hum[10];float last;float now;float yuer;}record[500];
FILE *fp;
fp=fopen("123.rec","wb");
if(fp==NULL)
{printf("shibai");
exit(0);}
for(i=0;;i++)
{printf("num\taddress\thum\tlast\tnow\tyuer\n");
scanf("%d %s %s %f %f %f",&record[i].num,record[i].address,record[i].hum,&record[i].last,&record[i].now,&record[i].yuer);
fwrite(&record[i],sizeof(struct userinf),1,fp);
fflush(stdin);
printf("cont