確認問題1 ― scanf の基本
int a;
double b;
printf("aの値を入力:");
scanf("%d", &a);
printf("bの値を入力:");
scanf("%lf", &b);
printf("a は %d, b は%f \n", a, b);
aに5、bに3を入力した場合の出力は?
出力結果は?
a は 5, b は3.000000
a は 5, b は3
a は 5.000000, b は3.000000
解説: aはint型で%dで表示→5。bはdouble型で%fで表示→3.000000(%fはデフォルトで小数点以下6桁)。正しい書式指定子を使っているので正常に表示されます。
確認問題2 ― & を忘れたらどうなる?
scanf("%d", a); // ← &がない!
scanf("%lf", b); // ← &がない!
何が起こる?
正常に動作する
エラーが発生し、入力直後にプログラムが止まる
0が表示される
解説: scanfでは変数のアドレス(&をつけたもの)を渡す必要があります。&がないと、変数の「値」をアドレスとして解釈するため、不正なメモリアクセスが発生してプログラムが異常終了します。
scanfには必ず&をつけましょう!
確認問題3 ― scanf で型を間違えたら?
int型aの入力に%lf、double型bの入力に%dを使っています。
int a;
double b;
scanf("%lf", &a); // intなのに%lf!
scanf("%d", &b); // doubleなのに%d!
aに3、bに5を入力した場合、printf("a=%d, b=%f", a, b) の結果は?
出力結果は?
a は 3, b は 5.000000
a は 0, b は 0.000000(正しく表示されない)
コンパイルエラー
解説: scanfの書式と変数の型が一致しないと、メモリへの書き込みサイズが合わず、正しい値が格納されません。環境によって表示は異なりますが、期待した値にはなりません。
scanf:整数は%d、実数は%lfを正しく設定しましょう。