2011-05-30 37 views
-1

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

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); 
} 
+4

为什么你不能修改代码? – 2011-05-30 18:36:07

+0

检查fopen()的返回值:'if(!fp)printf(“error opening file!\ n”);' – karlphillip 2011-05-30 18:37:31

+0

即使我把\ n放在“snprintf(...)”中,或者即使我输入了fputs (“\ n”,fp)我的数据被保存在同一行中! – xcubis 2011-05-30 18:37:45

回答

0

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

+0

当你说要改变传递给snprintf()的格式字符串时,你的意思是做一些类似于循环q [i] .dateIn-> day等的内容?????我喜欢不同的领域被分隔标签,但是...我需要sometinh像这样: q [0] .name q [0] .numberplate ................. ..(“n”) q [1] .name q [1] .numberplate .................. – xcubis 2011-05-30 19:02:51

+0

然后写下那个。例如“%s \ t%s \ t%d \ t%s \ n%.2f \ t%.2f \ t%d ...”(注意那里的换行符) – Adam 2011-05-30 19:08:21

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也许不够

0

最有可能您正在使用喜欢的编辑器中查看您的结果\ r \ n只换行(\ n)。尝试在NL之前添加\ r(CR)。