C语言 fscanf无法读入文件中的内容

#include<stdio.h>#include<string.h>#include<math.h>#include<stdlib.h>structcx{intmont... #include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
struct cx
{ int month;
float jck;
float ck;
float jk;
}chaxun[8];
int i;
main()
{ void TianJiaShuJu();
void search();
void add();
void del();
char keyboard;
printf("欢迎使用本软件\n");
printf("添加数据:1,查询数据:2\n");
printf("请输入操作:\n");
keyboard=getchar();
if(keyboard=='1')
TianJiaShuJu();
if(keyboard=='2')
search();
}
void TianJiaShuJu()
{
char str[200]="e:\\";
char year[5];
char txt[]="\.txt";
FILE *filename;

// printf(str);
// printf("\n");
printf("请输入年份:\n");//输入四个数字字符
scanf("%*c%c%c%c%c",&year[0],&year[1],&year[2],&year[3]);
strncat(str,year,4);
strcat(str,txt);
filename=fopen(str,"a+");
// printf(str);
// printf("\n");
if((filename=fopen(str,"a+"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(0);
}
for(i=0;i<=8;i++)
{
printf("请输入月份:\n");
scanf("%d",&chaxun[i].month);
fprintf(filename,"%d\t",chaxun[i].month);
printf("请输入进出口额:\n");
scanf("%f",&chaxun[i].jck);//如果用“%d”则数据丢失,具体原因不知道
fprintf(filename,"%f\t",chaxun[i].jck);
printf("请输入出口额:\n");
fprintf(filename,"%f\t",chaxun[i].ck);
scanf("%f",&chaxun[i].ck);
printf("请输入进口额:\n");
scanf("%f",&chaxun[i].jk);
fprintf(filename,"%f\t\n",chaxun[i].jk);
}
fclose(filename);
getch();
}
void search()
{ int yuefen;
char str[200]="e:\\";
char year[5];
char txt[]="\.txt";
FILE *filename;

// printf(str);
// printf("\n");
printf("请输入年份:\n");//输入四个数字字符
scanf("%*c%c%c%c%c",&year[0],&year[1],&year[2],&year[3]);
strncat(str,year,4);
strcat(str,txt);
// printf(str);
// printf("\n");
filename=fopen(str,"r+");
if((filename=fopen(str,"r+"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(0);
}
for(i=0;i<=8;i++)
{fscanf(filename,"%d,%f,%f,%f",&chaxun[i].month,&chaxun[i].jck,&chaxun[i].ck,&chaxun[i].jk);
}
printf("请输入月份:\n");
scanf("%d",&yuefen);
if(chaxun[i].month=yuefen)
{
printf("当年当月进出口额是:%f",chaxun[i].jck);
printf("当年当月出口额是:%f",chaxun[i].ck);
printf("当年当月进口额是:%f\n",chaxun[i].jk);
}
else if(yuefen==0)
{
for(i=0;i<=8;i++)
{
printf("当年全年第%d月进出口额是:%f\n",chaxun[i].month,chaxun[i].jck);
printf("当年全年第%d月出口额是:%f\n",chaxun[i].month,chaxun[i].ck);
printf("当年全年第%d月进口额是:%f\n",chaxun[i].month,chaxun[i].jk);
}
}

}
执行后,发现查询时没有找到相应的结果,结构体中的思想都成了0,望高手指教一下,不胜感激。
展开
 我来答
logiciel
2011-01-31 · TA获得超过140个赞
知道小有建树答主
回答量:223
采纳率:0%
帮助的人:368万
展开全部
查询出错的原因是以下2行错了:
{fscanf(filename,"%d,%f,%f,%f",&chaxun[i].month,&chaxun[i].jck,&chaxun[i].ck,&chaxun[i].jk);//写到文件中的数据之间没有逗号,因此不能正确读入
if(chaxun[i].month=yuefen)//漏了一个等号,并缺少循环.

建议修改如下:
for(i=0;i<=8;i++)
//错 {fscanf(filename,"%d,%f,%f,%f",&chaxun[i].month,&chaxun[i].jck,&chaxun[i].ck,&chaxun[i].jk);
{fscanf(filename,"%d%f%f%f",&chaxun[i].month,&chaxun[i].jck,&chaxun[i].ck,&chaxun[i].jk);
}
printf("请输入月份:\n");
scanf("%d",&yuefen);
if(yuefen==0)
{
for(i=0;i<=8;i++)
{
printf("当年全年第%d月进出口额是:%f\n",chaxun[i].month,chaxun[i].jck);
printf("当年全年第%d月出口额是:%f\n",chaxun[i].month,chaxun[i].ck);
printf("当年全年第%d月进口额是:%f\n",chaxun[i].month,chaxun[i].jk);
}
}
else
{
for(i=0;i<=8;i++)
{
if(chaxun[i].month==yuefen) //错:if(chaxun[i].month=yuefen)
{
printf("当年当月进出口额是:%f",chaxun[i].jck);
printf("当年当月出口额是:%f",chaxun[i].ck);
printf("当年当月进口额是:%f\n",chaxun[i].jk);
break;
}
}
}

另外还有2个错误:
(1)以下语句次序错了:
printf("请输入出口额:\n");
fprintf(filename,"%f\t",chaxun[i].ck);
scanf("%f",&chaxun[i].ck);
应改为:
printf("请输入出口额:\n");
scanf("%f",&chaxun[i].ck);
fprintf(filename,"%f\t",chaxun[i].ck);
(2)程序中的循环范围是for(i=0;i<=8;i++),因此:
}chaxun[8];
要改为
}chaxun[9];
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式