сохранение структуры C в файле проблема! - PullRequest
0 голосов
/ 30 мая 2011

Я пытаюсь сохранить свою структуру в файле .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 голосов
/ 31 мая 2011

Вы забыли перебрать свою коллекцию автомобилей? Вы проехали на машине до 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 голосов
/ 31 мая 2011

Скорее всего, вы просматриваете результаты с помощью редактора, который предпочитает \ r \ n просто перевод строки (\ n). Попробуйте добавить \ r (CR) перед NL.

0 голосов
/ 30 мая 2011

Этот код сначала помещает все данные в строку с помощью snprintf (), а затем выводит эту строку в файл.Таким образом, чтобы изменить разделитель вывода, вы должны изменить строку формата, переданную snprintf ().Обратите внимание, как поля в настоящее время разделены табуляцией (\ t) или /.Они должны быть заменены на новые строки.Если вы работаете в Windows, попробуйте "\ r \ n", если это не сработает.

...