1
int main()
{

    FILE *fp;
    char another = 'Y';
    struct emp
    {
            char name[20];
            int age;
            float bs;
    };
    struct emp e;

    fp = fopen("employee.dat", "w");

    if(fp == NULL)
    {
            printf("file cannot be opened for writing\n");
            exit(1);
    }

    while(another == 'Y')
    {
            printf("\n enter name, age and basic salary: ");
            scanf("%s %d %f", e.name, &e.age, &e.bs);
            fprintf(fp, "%s %d %f\n", e.name, e.age, e.bs);

            printf(" Add another record (Y/N)");
            fflush(stdin);
            scanf("%c", &another);
    }

    fclose(fp);
    return 0;

このプログラムでは、employee.dat という名前のファイルにレコードを書き込もうとしています。プログラムは正常に実行されましたが、従業員のレコードが 1 つしかないため、プログラムが終了します。追加する次のレコードを求めているわけではありません。つまり、

 fflush(stdin); 
 scanf("%c", &another);

プログラムで実行されていません。

前もって感謝します....

4

3 に答える 3

2

あなたが経験している問題はscanf("%c", &another);、入力バッファから 1 文字しか取得できないことです。これは問題ありませんが、入力後に「enter」を押した結果、入力バッファーに改行がまだ残っていることを除きます。getchar()次のように使用した後、入力バッファをクリアする必要があります。

char c;
while ((c = getchar()) != '\n');
于 2013-08-04T13:38:32.203 に答える
0

scanf("\n%c",&another);の代わりに: を使用するだけで修正できますscanf("%c",&another);

scanf("%s %d %f", e.name, &e.age, &e.bs);

例--->入力は次のとおりです: name_1 22 6000.000 <"Enter">

次にバッファ内: name_1 -->e.name 22-->e.age 6000.00-->e.bs <"Enter">-->nothing

fflush(stdin);//it didn't delete the <"Enter">.
scanf("\n%c", &another);//here we deal with <"Enter">
于 2013-08-04T14:44:02.113 に答える
0

あなたはこれを行うことができます:

while(another == 'Y' || another == 'y')
    {
            printf("\n enter name, age and basic salary: ");
            scanf("%s %d %f", e.name, &e.age, &e.bs);
            fprintf(fp, "%s %d %f\n", e.name, e.age, e.bs);

            printf(" Add another record (Y/N)");

            another=getch();
            //scanf("%c", &another);

    }
于 2013-08-04T14:00:08.713 に答える