используя while (! feof) с завершающим условием, все же он идет в бесконечном цикле в c

Я кодирую программу для системы управления библиотекой как мой проект в c. Я использовал цикл while вместе с условием !feof чтобы проверить файл для book . Поскольку я читал, что мы не должны его использовать, и если мы должны, мы должны сделать это с некоторым заявлением о разрыве, а также с тех пор, как я читал большой нет. переменных из файла, которые я использовал для разрыва цикла while. всякий раз, когда Target и book.bname будут соответствовать (используя strcmp ), found установлено в 1 и while цикл будет завершен. Это логика, которую я использовал за этим кодом. Здесь book представляет собой структуру, из которой book.bname является частью. Я использую linux os для этой программы. Скажите, пожалуйста, где я ошибаюсь?

 void Searchbook() { int i; char Target[25],stats[3]; int Found=0; if((librecord=fopen("librecord.txt","r"))==NULL) printf(" ! The File is Empty...\n\n"); else { printf("\nEnter The Name Of Book : "); scanf("%s",Target); while(!feof(librecord)&& Found==0) { fscanf(librecord,"%d %s %s %d %d",&book.bid,book.bname,book.author,&book.status,&book.nooftitles); if(strcmp(Target,book.bname)==0) Found=1; for(i=0;i<book.nooftitles;i++) fscanf(librecord,"%s",book.titles); } if(Found) { if(book.status==IN) strcpy(stats,"IN"); else strcpy(stats,"OUT"); printf("\nThe Unique ID of The Book: %d\nThe Name of Book is: %s\nThe Author is: %s\nThe Book Status:%s\n\n",book.bid,book.bname,book.author,stats); } else if(!Found) printf("! There is no such Entry...\n"); fclose(librecord); } } 

Это функция, в которой я столкнулся с бесконечным циклом после ввода имени книги. Он переходит в бесконечный цикл, печатая имя первой книги, с которой он сталкивается. Что я должен делать? моя проблема отличается от другого аналогичного вопроса, так как я использую только два условия, а не только !feof . Я использую variable как flag Пока while loop не завершается.

Вы не читаете следующую строку из файла, поскольку вы не продвигаетесь вообще. Вам нужно использовать fgets для чтения строки из файла или fgetc для чтения символа. fgets автоматически останавливается при чтении нового символа строки, что может быть решением для чтения одной строки за раз. Другое решение, если вы используете GNU-версию библиотеки C, – это использовать [getLine] ( http://man7.org/linux/man-pages/man3/getdelim.3.html ), который читает строку для вас.

Независимо от того, что вы используете, вам нужно прочитать строку, а затем перейти к следующей строке до конца, и это не то, что вы делаете с вашим текущим кодом.