2011-05-30 43 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)。