0

私はこのCコードを持っています.私が遭遇する問題は、私が望むようにレコードを見つけることができないということです.ファイル処理を使用すると、常に結果が見つからないと表示されます. システムを明確に動作させ、記録を表示する正しい方法は何ですか?

    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    #include <stdbool.h>
    #include <stdlib.h>
    #include <windows.h>


    void loadMenu();
    void addEmployee();
    void searchEmployee();
    bool found = false;
    int choice;

    FILE*myrec;

    char Name[20],Age[20],IDnum[20],search[20];

    void loadMenu(){
    printf("[1]Add Employee\t[2]Search Employee\t[3]Exit\nChoice:");
    scanf("%d", &choice);
    }


    void addEmployee (){
    char ans;
    do{
    printf("Enter IDnumber:");
    fflush(stdin);
    gets(IDnum);
    printf("Enter Name:");
    fflush(stdin);
    gets(Name);
    printf("Enter Age:");
    fflush(stdin);
    gets(Age);

    myrec = fopen ("record.txt","a+");
    fprintf(myrec,"%s \t %s \t %s \n ",Name,Age,IDnum);
    printf("Record Saved !");
    printf("Do you want to add another record ? Y/N");
    scanf("%s",&ans);
    fclose(myrec);
    }
    while (ans=='Y'||ans=='y');
    }


    void searchEmployee(){

    myrec = fopen("record.txt","a+");
    printf("Enter Employee IDnumber:");
    scanf("%s",&search);
    while(!feof(myrec)){
    fscanf(myrec,"%s %s %s",IDnum,Name,Age);
    if (strcmp(search,IDnum)==0){
    printf("IDnum: %s\n", IDnum);
    printf("Name: %s\n",Name);
    printf("Age :%s\n",Age);
    found = true;
    break;

    }

    }
    if(!found) printf("No results.");
    fclose (myrec);
    }


    int main(){
    bool repeat = false;
    do{
    loadMenu();
    switch(choice){

    case 1:
    addEmployee();
    break;

    case 2:
    searchEmployee();
    break;

    case 3:
    repeat = true;
    break;
    }
    }while(!repeat);

    getch();
    }

私のコードの何が問題なのですか?

4

2 に答える 2

0

たくさん間違っています。

いくつかの簡単なもの:

  1. 読み取ろうとするfeof() 前にチェックしないでください。これは無効です。feof()実際、失敗した読み取りをすでに行っていない限り、決して使用しないでください。
  2. ファイルから読み取る"a+"だけの場合は、append ( ) モードで開かないでください。このモードでは読み取りがサポートされていますが、それでも奇妙です。
  3. おそらく、ファイルを開いたままにしておくのではなく、もう一度開いてみてください。
  4. のような I/O 関数の戻り値を常に確認してくださいfscan()。彼らは失敗する可能性があります。
于 2012-09-14T11:32:57.540 に答える
0

いくつかのエラーが表示されます:

  1. バッファオーバーフロー

    char ans;

    scanf("%s",&ans); // 'Y' を入力すると、少なくとも 2 文字 ('Y' と '\0') が書き込まれます

より大きな ans バッファを使用してください: char ans[10];

次に scanf("%s", ans);

  1. ポインターへのポインター

    文字検索[20]; // search はバッファへのポインタです

    scanf("%s",&search); // scanf("%s", search); を使用する必要があります。

于 2012-09-14T11:49:10.260 に答える