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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4 из 5