3

ユーザーが次のように var で区切られた正確に4 つの引数を入力したかどうかを確認することになっている if ステートメントがあります: param1,param2,param3,param4 。問題は、ユーザーが 4 つ以上の入力を行った場合にエラーが返されないことです。彼が4未満を与えた場合にのみエラーを返します。

char input[60];
char a1[42], a2[42], a3[42], a4[1];
printf("Enter info");
fgets(input, 60, stdin);
if (4 != sscanf(input,"%1[^,\n], %1[^,\n], %1[^,\n], %[^,\n]",a1, a2, a3, a4)) {
    return printf("Error"),1;
}
else
{
    printf("In");
}

理由がわかりません。ご協力いただきありがとうございます

4

3 に答える 3

3

データを正常sscanfに読み取ると、入力された変数の数が返されます。変数よりも少ない値を入力したい場合4、成功したと見なされるには、次のように言う必要があります。

if (sscanf(input,"%1[^,\n], %1[^,\n], %1[^,\n], %[^,\n]",a1, a2, a3, a4)<=4) {
        printf("In");
}

また、失敗sscanfすると が返されEOFますが、 より大きい数値は返されません4

(ターミネータ用のスペースがないことに注意してa4[1]ください。少なくとも を使用してくださいa4[2]。)

4つ以上の変数が満たされた場合は失敗と見なされるようにする必要があるため、1つの変数を追加することができsscanfます。

編集4変数が必要な場合は、以下のコードを使用してください:

    char input[60];
    char a1[42], a2[42], a3[42], a4[2],a5[42];
    printf("Enter info");
    fgets(input, 60, stdin);
    if (sscanf(input, "%1[^,\n], %1[^,\n], %1[^,\n], %1[^,\n], %[^,\n]", a1, a2, a3, a4,a5) == 4) {
        printf("In");
    }
    else
    {
        printf("error");
        exit(EXIT_FAILURE);
    }
}

a,b,c,d,e4 つ以上の変数が入力されるため、エラーが出力されます。

于 2020-04-06T18:57:42.580 に答える