0

ユーザー入力 (姓、名、およびスコア) を読み取り、この情報をテキスト ファイルに書き込む必要があるプログラムで作業しています。入力を要求し、各入力権限のフラグを設定する 1 つのループを作成しました。すべての入力が収集され、ユーザーが他に何も追加したくない場合、ループは終了する必要があります。

問題は、名前を保持するように変数を設定したことですが、ループの次の反復でこれらの変数を再利用する方法が 1 つ必要です。したがって、ループが開始され、ユーザー入力が収集され、ファイルに書き込まれ、新しい反復の変数が「クリア」されます。

ユーザーは、ファイルにできるだけ多くのデータを挿入できる必要があります。しかし、今は 1 セットのデータ (姓、名、スコア) を追加するだけです。

void enter_data(void)
{

/* create file */
    FILE *fp;

    /*variables*/
    char answer;
    int flag1 = 0;
    int flag2 = 0;
    int flag3 = 0;
    int score = 0;  
    int test;
    char leave[SIZE] = "exit";
    char input_lname[SIZENAME];
    char input_fname[SIZENAME];
    char input_score[5];
    char input_answer[5];
    char lname[SIZENAME];
    char fname[SIZENAME];




    /*check if file was created */
    if((fp = fopen("students.dat", "ab+")) == 0){
        perror("fopen");
    }


    /* start of interaction */
    while(!(flag1 && flag2 && flag3))
    {
        flag1 = 0;
        flag2 = 0;
        flag3 = 0;

        /* ask for last name */
        while(flag1 != 1)
        {
            printf("Enter last name:\n");

            if(!fgets(input_lname, SIZENAME, stdin))
            {
                clearerr(stdin);
                break;
            }   
            /* validate last name. if not digit... */
            if(!sscanf(input_lname, "%d", &test) == 1)

                /*put first word in lname */
                sscanf(input_lname, "%16s", lname);

            if(strcmp(input_lname, leave) != 0)
            {
                flag1 = 1;
                break;
            }
        }


        /* ask for first name */
        while(flag2 != 1)
        {
            printf("Enter first name:\n");

            if(!fgets(input_fname, SIZENAME, stdin))
            {
                clearerr(stdin);
                break;
            }   
            /* validate first name. if not digit... * */
            if(!sscanf(input_fname, "%d", &test ) == 1)
            {
                /*put first word in fname */
                sscanf(input_fname, "%16s", fname);

                flag2 = 1;
                break;
            }
        }


        /* ask for score */
        while(flag3 != 1)
        {
            printf("Enter score:\n");

            if(!fgets(input_score, SIZENAME, stdin))
            {
                clearerr(stdin);
                break;
            }

            /* validate last name */
            if(sscanf(input_score, "%3d", &score) == 1)
            {
                if((score >= 0) && (score <= 100))
                {
                    flag3 = 1;
                    break;
                } else if (score == -1)
                    break;
            }
        }

        /* store record in file */
        if((flag1 == 1) && (flag2 == 1) && (flag3 == 1))
        {
            printf("r %16s, %16s, %5d", lname, fname, score);
            fprintf(fp, "%16s %16s %5d", lname, fname, score);


        }

        /* ask for another student */
        printf("Would you like to enter data for another student?\n");
        if(!fgets(input_answer, SIZE, stdin))
        {
            clearerr(stdin);
            break;
        }   
        if(sscanf(input_answer, "%s", &answer)  == 1)
        {
            if(answer == 'y') 
            {
                flag1 = 0;
                flag2 = 0;
                flag3 = 0;
                continue;
            } else
                break;
        }

        flag1 = 0;
        flag2 = 0;
        flag3 = 0;

        fclose(fp);
        /* finish asking */

    }


}
4

1 に答える 1

1
   struct Record {
    /*variables*/
    char answer;
    int flag1;
    int flag2;
    int flag3;
    int score;  
    int test;
    char leave[SIZE];
    char input_lname[SIZENAME];
    char input_fname[SIZENAME];
    char input_score[5];
    char input_answer[5];
    char lname[SIZENAME];
    char fname[SIZENAME];
   }

   while ( /* condition */ ) {
       // Create a record to keep the user inputs.
       Record oneRecord;
       oneRecord.flag1 = 1;
       oneRecord.flag2 = 2;
       ....

       // Write to file or other else.
   }

「構造体」構文が役立つ場合があります。

于 2013-10-11T07:31:09.850 に答える