0

コードに取り組んでいて、整数の代わりに文字を入力しようとしましたが、入力した文字に関係なく結果が「2」でした。これは未定義の動作ですか、それとも何か他のものですか?

コード:

#include <stdio.h>
int f1(int n);
int f2(void);

int main(void)
{
    int t;

    printf("Enter a number: ");
    scanf("%d", &t);
    /* print proper message */
    t ? f1(t) + f2() : printf("zero entered.\n");
    return 0;
}

int f1(int n)
{
    printf("%d ", n);
    return 0;
}

int f2(void)
{
    printf("entered.\n");
    return 0;
}

エントリーすると「2エントリー」となり、エントリーするaと「2エントリー」となり、gエントリーしi,h,k,.....ても結果は同じでした。それは何ですか?

4

5 に答える 5

0

scanf入力の解析に失敗したためです。を使用したため、 10 進数を入力する必要があります%d

scanfこの種の動作を回避するには、の戻り値を確認する必要があります。

成功すると、この関数は、正常に埋められた引数リストの項目数を返します。このカウントは、一致の失敗、読み取りエラー、またはファイルの終わりに達したために、予想される項目数と一致するか、それより少ない (0 の場合もある) 可能性があります。

そう :

int items_matched;

// ...
items_matched = scanf("%d", &t);   // Get the return value

if ( items_matched != 1 )          // Check it
{
    printf("Matching failure with scanf.\n");
    return 0;
}
else
{
    if ( t == 0 )
        printf("zero entered\n");
    else
        printf("%d entered\n", t);
}

f1(t) + f2()かなり混乱しているあなたは必要ありません...

于 2013-08-18T09:40:38.067 に答える