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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д