0

私のプロジェクトとして、図書館管理システムのプログラムをcでコーディングしています。条件とともに while ループを使用して!feof、ファイルのbook. 私はそれを使用すべきではないことを読んだので、そうしなければならない場合は、いくつかの break ステートメントでそれを行う必要があります。ファイルからの変数foundの、while ループを中断するために使用しました。Targetandが ( を使用して)book.bname一致するたびに、が 1 に設定され、while ループが終了します。これは、このコードの背後で使用したロジックです。これはその一部である構造です。このプログラムには Linux OS を使用しています。どこが間違っているのか教えてください。strcmpfoundbookbook.bname

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);
    }
}

これは、本の名前を入力してから無限ループに直面している機能です。最初に見つけた本の名前を出力する無限ループに入ります。私は何をすべきか?のみではなく2つの条件を使用しているため、私の問題は他の同様の質問とは異なり !feofます。 variableを .として使用していますが、まだ終了flag while loopていません。

4

1 に答える 1

0

まったく進んでいないため、ファイルから次の行を読み取っていません。fgetsファイルから文字列を読み取るか、文字を読み取るために使用する必要がありますfgetcfgets改行文字を読み取ると自動的に停止するため、一度に1行ずつ読み取るソリューションになる可能性があります。C ライブラリの GNU バージョンを使用している場合の別の解決策は、行を読み取る [getLine] ( http://man7.org/linux/man-pages/man3/getdelim.3.html ) を使用することです。

何を使用するにせよ、行を読んで最後に到達するまで次の行に移動する必要がありますが、これは現在のコードで行っていることではありません。

于 2016-11-19T23:46:49.747 に答える