Lilyanaa Ответов: 2

Пишите на .txt файл в C Программирование


как можно писать в файле таким образом

Что я уже пробовал:

например:
seq          name        type2          type3                type4
1             z           33.4          5.3                  444.7
2             w           66.4          6.1                   99.4
3             m 
.              .              
.              .
.              .


У меня есть массив структуры, и я хочу записать его в файл, что не так в этом коде?

int write_to_file( chrom *data, char *filename,int ch,int m) 
{ 
 
printf("\n Creating %s.csv file",filename);
 
FILE *fp;
 
int i,j;
 
filename=strcat(filename,".csv");
 
fp=fopen(filename,"w+");
 
fprintf(fp,"Student Id, Physics, Maths");
for(i=0;i<m;i++){
 
    for(j=0;j<ch;j++){
 
fprintf(fp," %s  %d     \n", data[i].name[j] , data[i].id[j]);
         
 
    }
 }
fclose(fp);
 
printf("\n %sfile created",filename);
 
}

2 Ответов

Рейтинг:
2

Patrice T

Цитата:
как можно писать в файле таким образом

На этом сайте мы поможем вам исправить ваш код, но вы должны показать свой код и объяснить свою проблему.
Запись в файл не сложнее, чем запись в консоль, на самом деле в основном то же самое.
Поскольку обучение вас тому, как это делать, не входит в тему этого форума, вам следует перечитать свои уроки или найти один из многочисленных учебников, доступных в интернете.
-----
Мы не делаем вашу домашнюю работу.
Домашнее задание не предназначено для проверки ваших навыков просить других людей сделать вашу работу, оно предназначено для того, чтобы заставить вас думать и помочь вашему учителю проверить ваше понимание курсов, которые вы прошли, а также проблем, которые вы испытываете при их применении.
Любая ваша неудача поможет учителю выявить ваши слабости и наметить меры по исправлению положения.
Любая ваша неудача поможет вам узнать, что работает, а что нет, это называется "методом проб и ошибок".
Так что попробуйте, перечитайте свои уроки и приступайте к работе. Если вы застряли на конкретной проблеме, покажите свой код и объясните эту точную проблему, мы можем помочь.


Рейтинг:
14

Richard MacCutchan

Используйте fwrite: C библиотечная функция fwrite()[^]


Lilyanaa

Я хочу в том же формате в примере, как это можно сделать?

Richard MacCutchan

Просто поставьте пробелы или табуляции между полями или напишите в формате .CSV. Вы можете использовать fprintf, _fprintf_l, fwprintf, _fwprintf_l[^] чтобы написать форматированный текст.

Lilyanaa

спасибо за вашу помощь, вы можете увидеть мой вопрос обновления?

Richard MacCutchan

Да, но это не формат .csv. CSV расшифровывается как переменные, разделенные запятыми, поэтому вам нужно добавлять запятые между отдельными полями, а не пробелы. У вас также есть пять спецификаторов формата в строке формата, но только четыре поля данных.

Как правило, вы не должны использовать форматирование в вашем резервном хранилище (файл, база данных и т. д.). Единственный раз, когда вам нужно отформатировать данные, - это когда они отображаются или печатаются для пользователя.

Lilyanaa

почему ошибка сегментации ?

Richard MacCutchan

Потому что у вас есть пять спецификаторов формата, но только четыре фактических ссылки на данные. Поэтому, когда библиотечная подпрограмма идет, чтобы получить пятый элемент, она получает мусор для адреса данных, который вызывает ошибку; в вашем случае SEGV.

Lilyanaa

Нет, это та же самая проблема при использовании файла .csv

Richard MacCutchan

Может быть, из-за того, что filename=strcat(filename,".csv"); Вы не должны изменять указатель данных таким образом, если не уверены, что исходный буфер имеет достаточно места для приема дополнительных символов.