IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Си файли, неправельный вывод на экран
сообщение
Сообщение #1


Гость






Всем доброго времени суток, у меня следущая проблема, не выводиться на экран текст записей из файла, если раскоментировать указаный в тексте код, тогда выводиться но не то что надо:

#include <stdio.h>
#define base_size 50
struct writer {
char *lastname;
char *id;
char *bookname;
int yearofedition;
};

int main() {
FILE *p_file, *e_file;
unsigned short int n_in;
writer *e_avtor, *t_avtor;
p_file = fopen("P.dat", "wb");
e_avtor->lastname="Shevchenko"; e_avtor->id="T.G."; e_avtor->bookname="Kobzar"; e_avtor->yearofedition=1830;
n_in = fwrite(e_avtor, sizeof(*e_avtor), 1, p_file);
e_avtor->lastname="Tolstoj"; e_avtor->id="I.V."; e_avtor->bookname="War and Peace"; e_avtor->yearofedition=1879;
n_in = fwrite(e_avtor, sizeof(*e_avtor), 1, p_file);
e_avtor->lastname="Perymov"; e_avtor->id="A.B."; e_avtor->bookname="Matrx"; e_avtor->yearofedition=1930;
n_in = fwrite(e_avtor, sizeof(*e_avtor), 1, p_file);
fclose(p_file);

if((p_file = fopen("P.dat","rb")) == NULL) {
fprintf(stderr,"Can not open file\n");
return 1;
}
int number_of_record = 0;
writer *w_temp[base_size];
printf("%c",'\n');

while(!feof(p_file)) {
if ( fread(w_temp[number_of_record], sizeof(*w_temp), 1, p_file) /*== sizeof(*w_temp)*/ ) { // <- вот здесь
printf("%s\n", w_temp[number_of_record]->lastname);
++number_of_record;
}
}//printf();
//for(int i=0;i<base_size;i++)

return 0;
}


 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






...
writer *w_temp[base_size]; // описать-то ты массив описываешь, а выделять место кто будет?

int ix;
for(ix = 0; ix < base_size; ++ix)
w_temp[ix] = new writer; // выделяем место

printf("%c",'\n');
while(!feof(p_file)) {

// размер структуры, а не элемента массива
if ( fread(w_temp[number_of_record], sizeof(struct writer), 1, p_file) )
printf("%s\n", w_temp[number_of_record]->lastname);
++number_of_record;
}
}
...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Спасибо вам, теперь все понятно
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 5.12.2020 0:57
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name