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