#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.