2026-09-21
read_sum.c
#include <stdio.h>
int main(void) {
int a, b;
printf("Enter two integers: ");
scanf("%d %d", &a, &b);
printf("Sum: %d\n", a + b);
return 0;
}
scanfの戻り値を確認していません。何が問題で、どう直せばよいでしょうか?
Answer
入力が数値でなかったり、途中で終わっていたりすると、scanfはa・bの一部、あるいは両方に代入せずに戻ります。この場合a・bは初期化されていないローカル変数なので、代入されなかった方は不定値のままです。そのままa + bを評価して読み出すのは、不定値を読む未定義動作です。scanfの戻り値は「実際に代入できた個数」を返すので、期待する個数(2)と比較してからa・bを使うようにします:
int main(void) {
int a, b;
printf("Enter two integers: ");
if (scanf("%d %d", &a, &b) != 2) {
fprintf(stderr, "invalid input\n");
return 1;
}
printf("Sum: %d\n", a + b);
return 0;
}