【问题标题】:saving C structure in file problem!在文件问题中保存 C 结构!
【发布时间】:2011-05-30 18:33:24
【问题描述】:

我正在尝试将我的结构保存在 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 );
}

【问题讨论】:

  • 为什么不能修改代码?
  • 查看fopen()的返回:if (!fp) printf("error opening file!\n");
  • 即使我将 \n 放入 "snprintf(...)" 或者即使我输入 fputs("\n",fp) 我的数据也将保存在同一行中!!!
  • 你确定要编译吗?
  • @karlphilip...是的...我的错误..我没有检查 fopen() 的返回,但我的数据仍然保存在一行中@Nathan Fellman 是的..我是正在编译...并创建文件 arxeio3.txt...我的数据在...但都在一行中!!!!!

标签: c file save struct


【解决方案1】:

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

【讨论】:

  • 当您说更改传递给 snprintf() 的格式字符串时,您的意思是执行类似循环 q[i].dateIn->day 等的事情??????我需要用制表符分隔不同的字段,但是......我需要这样的东西:q[0].name q[0].numberplate .................... . ("n") q[1].name q[1].numberplate ....................
  • 那就这么写吧。例如 "%s\t%s\t%d\t%s\n%.2f\t%.2f\t%d..." (注意那里的换行符)
【解决方案2】:

您是否忘记循环查看您的汽车收藏?你有没有像这样把车传给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 可能不够

【讨论】:

    【解决方案3】:

    您很可能正在使用更喜欢 \r\n 而不是换行符 (\n) 的编辑器查看结果。尝试在 NL 之前添加 \r (CR)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-27
      • 1970-01-01
      • 2012-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多