#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("input c:");
scanf("%c",&ch);
吗?
那就应该先只输出:
input c:
等我输入字符后再显示:
num address hum last now yuer
才对啊??
为什么不是这样呢?
我还没输入字符它就默认进入了第二次循环了?
怎么回事??谢谢解答!!
TC2.0中循环语句中的字符输出问题
答案:2 悬赏:70
解决时间 2021-03-02 19:24
- 提问者网友:清羽墨安
- 2021-03-01 22:52
最佳答案
- 二级知识专家网友:短发女王川岛琦
- 2021-03-01 23:14
这是因为在你打上一行数据后,回车确认后,这一行的数据就被输入出去了,但是回车没有被输入的,它还被保留在键盘的缓冲区里面,之后执行
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("continue:(y/n)?\n");
printf("input c:");
scanf("%c",&ch);
if(ch=='n'||ch=='N')
break;
}
fclose(fp);
}
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("continue:(y/n)?\n");
printf("input c:");
scanf("%c",&ch);
if(ch=='n'||ch=='N')
break;
}
fclose(fp);
}
全部回答
- 1楼网友:山鬼偶尔也合群
- 2021-03-02 00:00
你好!
你这好像是一个死循环吧.没有INPUT语句.输出语句是OUTPUT.也没有END语句.无法判断在什么条件下终止循环/
如有疑问,请追问。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯