在文件问题中保存C结构!

时间:2011-05-30 18:33:24

标签: c file save struct

我正在尝试将我的结构保存在file.txt中。我找到了以下保存代码,但问题是我希望每个q[i]都保存在文件的不同行中!我无法修改代码。

void WriteFile(struct car* q )
{
    printf("Attempting to write...");
   FILE* fp = 0;
   char* buffer = 0;
   int i=0;

   /* allocate */
   buffer = malloc ( 150 );
   bzero( buffer, 150 );

   /* copy the data to a string */

   snprintf( buffer, 150, "%s\t%s\t%d\t%s\t%.2f\t%.2f\t%d/%d/%d\t%d/%d/%d\t%d/%d/%d\n",q->name,q->numberplate,q->km,q->phonenumber,q->overall_cost,q->paid_cost,q->dateIn->day,q->dateIn->month,q->dateIn->year,q->dateServiced->day,q->dateServiced->month,q->dateServiced->year,q->dateOut->day,q->dateOut->month,q->dateOut->year); 
   printf("\n"); 

   fp = fopen("arxeio3.txt", "a" );
   fputs( buffer, fp );
   fputs("\n",fp);

   free( buffer );
   fclose( fp );
}

3 个答案:

答案 0 :(得分:0)

此代码首先将所有数据放入带有snprintf()的字符串中,然后将该字符串转储到文件中。因此,要更改输出的分隔符​​,您必须更改传递给snprintf()的格式字符串。注意字段当前如何通过制表符(\ t)或/分隔。这些必须由换行符替换。 如果您在Windows上,请尝试“\ r \ n”,如果这不起作用。

答案 1 :(得分:0)

你忘了循环你的汽车收藏吗?你有没有把车开到WriteFile这样:

struct car[MAX_CAR];
int numberOfCar=0;

... // code to fill in car and update numberOfCar

for(i=0;i<numberOfCar;++i)
  WriteFile(&car[i]);

您的WriteFile实施没有任何问题,只是缓冲区长度150可能不够

答案 2 :(得分:0)

您很可能正在使用编辑器查看结果,该编辑器更喜欢\ r \ n到新行(\ n)。尝试在NL之前添加\ r \ n(CR)。