在c中读写文件

问题描述 投票:-1回答:1

我想做的是编写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();


}

c function file scanf fopen
1个回答
0
投票

只需删除该行,然后再次运行:)

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

当程序使用]读取文件时>

fscanf(f,"%d %s %f",&p[i].Code,p[i].Name,&p[i].Price)

对于第1行

输入错误。这就是为什么应删除SaveProduct函数中的上述代码,以免line 1不会写入文件中的原因。

1
投票

这是对您的问题2的部分回答,为什么第二个函数,即displayProduct,会给我无穷的0序列...?

© www.soinside.com 2019 - 2024. All rights reserved.