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

> Внимание!

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

 
 Ответить  Открыть новую тему 
> Си файли, неправельный вывод на экран
Турбонуб
сообщение 18.03.2007 22:47
Сообщение #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;
}


 К началу страницы 
+ Ответить 
Алена
сообщение 19.03.2007 0:02
Сообщение #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;
	     }
      }
...
 К началу страницы 
+ Ответить 
Гость
сообщение 19.03.2007 0:29
Сообщение #3


Гость






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

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

 

- Текстовая версия 24.07.2025 2:58
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"