1
int x;
scanf("%d",&x);
printf("%d",x);

Input: . (just a period)
Output: 4096

ここで 4096 を出力するのはなぜですか。これが私が考えていることです: したがって、ピリオドの ASCII 値は 46 です。入力時に、46 のビット パターンとして x を読み取りますか? そして、印刷するとき、xのメモリ位置に4バイトを印刷するので、最初のバイトだけが46に対応するビットパターンで埋められ、残りは4096を構成するランダムなものですか? しかし、これは正しくありません。これを行うとどうなるか見てください--

int x;
scanf("%d",&x);
printf("%c",x);

Input: . (period)
Output: (nothing)

Input: 46
Output: . (period)

さらに紛らわしいのは、これを行うときに何が起こっているかです。

int x;
scanf("%c",&x);
printf("%d",x);

Input: . (period)
Output: 4142

Input: 46
Output: 4148

Input: 47
Output: 4148
4

1 に答える 1

7

scanf の戻り値を確認する必要があります (正常に読み取られた値の数です)。

int x;

if (scanf("%d",&x) == 1) {
    printf("%d", x);
} else {
    printf("Invalid input.");
}

解析が失敗した場合、x の値は定義されません。

scanf失敗すると、無効な入力がストリームから削除されないため、以降の呼び出しも失敗します。このため、 を使用するのは得策ではありませんscanf

于 2012-06-29T18:55:24.810 に答える