我想做的是编写2个函数:写入文件的功能和读取同一文件的功能…我面临两个问题:1-当我同时执行两个功能时:第一个函数几乎可以正常工作,但是没有返回1;第二个函数正确读取了我的文件,但是在无穷多个0之后,它给了我。2-当我仅执行第二个函数(读取)时,它会给我无限的0系列,但它没有读取文件中的内容。
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
struct Product
{
int Code;
char Name[30];
float Price;
};
struct Product p[15];
int SaveProduct(int n) // n number of product
{
int i;
FILE *f;
if((f=fopen("save.txt","w"))==NULL)
{
return 0;
}
else{
fprintf(f,"Code\tName\tPrice\n");
for(i=0;i<n;i++)
{
printf("enter Code,Name,Price\n");
scanf("%d %s %f",&p[i].Code, p[i].Name,&p[i].Price);
fprintf(f,"%d \t %s\t %.2f\n",p[i].Code, p[i].Name,p[i].Price);
}
fclose(f);
return 1;
}
}
void displayProduct()
{
FILE *f;
if ( (f=fopen("save.txt","r"))==NULL )
{
printf("error");
}
else
{int i=0;
printf("Code\tName\tPrice\n");
while(fscanf(f,"%d %s %f",&p[i].Code,p[i].Name,&p[i].Price) != EOF)
{
printf("%d\t %s\t %.2f\n",p[i].Code,p[i].Name,p[i].Price);
i++;
}
fclose(f);
}
}
int main()
{
SaveProduct(3); //3 number of product
displayProduct();
}
只需删除该行,然后再次运行:)
fprintf(f,"Code\tName\tPrice\n");
上面的行导致输出到save.txt文件,如下所示-
Code Name Price // line 1
123 aa 10 // line 2
456 bb 20 // line 3
789 cc 30 // line 4
当程序使用]读取文件时>
输入错误。这就是为什么应删除SaveProduct函数中的上述代码,以免line 1不会写入文件中的原因。fscanf(f,"%d %s %f",&p[i].Code,p[i].Name,&p[i].Price)
对于第1行
这是对您的问题2的部分回答,为什么第二个函数,即displayProduct
,会给我无穷的0序列...?