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

#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,望高手指教一下,不胜感激。

第1个回答  2011-01-31
查询出错的原因是以下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];本回答被提问者采纳
相似回答