Namaran

Code daily. Without assist.

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

入力が数値でなかったり、途中で終わっていたりすると、scanfabの一部、あるいは両方に代入せずに戻ります。この場合abは初期化されていないローカル変数なので、代入されなかった方は不定値のままです。そのままa + bを評価して読み出すのは、不定値を読む未定義動作です。scanfの戻り値は「実際に代入できた個数」を返すので、期待する個数(2)と比較してからabを使うようにします:

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;
}