Fread работает только для 0-го элемента файла - C (СИ)
Формулировка задачи:
Здравствуйте! Я писал программу по составлению односвязного списка, отсортированного по chimicalname, но столкнулся с проблемой при выводе результата. Если я вывожу сам список по указателям, то всё хорошо выводится, но мне нужно вывести все структуры в таблице. Для этого я поместил указатель файла в начало, т.к. до этого я его уже читал, и начал читать по структуре, сравнивая с моим указателем на список и если совпадало, то выводил. Но столкнулся с проблемой, что выводится у меня почему-то только 0-ая структура из файла. В чем проблема? Если файл я читаю по новой каждый раз, т.к. всё это организовано в цикле while (р), который означает, что будем искать структуру в файле, пока есть указатель на новый элемент.
Код:
Заранее искренне благодарю!
void list1()
{
PNode Head = NULL, p, where;
element el;
system ("cls");
printf("\n Введите имя файла: ");
char filename[80];
fflush(stdin);
gets(filename);
FILE *f;
f=fopen(filename,"rb");
while(fread(&el,sizeof(el),1,f))
{
p = CreateNode ( el.chimicalname ); // создаем новый узел
where = FindPlace ( Head, el.chimicalname ); // ищем место
if ( !where ) AddLast ( Head, p );
else AddBefore ( Head, where, p );
}
p = Head;
printf("\n |--------------------------------------------------------------------------| \n");
printf(" |Ат. н.| Хим. обозн.| н. пер.| н. гр.| Г*. ГЈГ°.| Ат. масса| Распр. электронов.|");
printf("\n |--------------------------------------------------------------------------| ");
while ( p ) // проход по списку и вывод результатов
{
rewind(f);
while(fread(&el,sizeof(el),1,f)&&strcmp(el.chimicalname,p->word)==0)
{
printf("\n |%-6d| %-9s| %-11s| %-7d| %-6d| %-9.3f| %-14d|",el.atnumber,el.nameelem,el.chimicalname,el.numberper,el.numbergroup,el.atmassa,el.electrons);
printf("\n |--------------------------------------------------------------------------| ");
break;
}
p = p->next;
}
fclose(f);
getch();
}Решение задачи: «Fread работает только для 0-го элемента файла»
textual
Листинг программы
strcmp(el.chimicalname,p->word)==0