проблема с сохранением структуры C в файле!

#c #file #save #struct

#c #файл #Сохранить #структура

Вопрос:

Я пытаюсь сохранить свою структуру в 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, "%st%st%dt%st%.2ft%.2ft%d/%d/%dt%d/%d/%dt%d/%d/%dn",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 );
}
  

Комментарии:

1. Почему вы не можете изменить код?

2. Проверьте возврат fopen(): if (!fp) printf("error opening file!n");

3. Даже если я вставлю n в «snprintf (…)» или даже если я введу fputs (» n», fp), мои данные будут сохранены в той же строке!!!

4. вы уверены, что компилируете?

5. @karlphilip…yes…my ошибка .. я не проверял возврат fopen(), но все равно мои данные сохранены в одной строке @Nathan Fellman да .. я компилирую … и файл arxeio3.txt создается… с моими данными внутри… но все в одной строке!!!!!

Ответ №1:

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

Комментарии:

1. Когда вы говорите изменить строку формата, переданную в snprintf(), вы имеете в виду выполнение чего-то вроде цикла q [i].DateIN-> day и т.д.????? Я бы хотел, чтобы разные поля были разделены вкладками, но … мне нужно что-то вроде этого: q [0].имя q [0].номерной знак ………………. (» n») q[1].имя q[1].номерной знак ………………

2. Тогда напишите именно это. например «%st%st%dt%sn%.2ft%. 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(amp;car[i]);
  

В вашей WriteFile реализации нет ничего плохого, за исключением того, что длина буфера 150 может быть недостаточной

Ответ №3:

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