Namaran

Code daily. Without assist.

2026-09-21

parse_pair.c

#include <stdio.h>

int main(void) {
    int a = -1, b = -1;
    int n = sscanf("10 abc", "%d %d", &a, &b);
    printf("n=%d a=%d b=%d\n", n, a, b);
}

このコードを実行すると、nabの値はそれぞれいくつになるでしょうか?

Answer

n=1 a=10 b=-1(その後に改行)。sscanfは変換指定を順番に処理し、1つ失敗した時点でそこで止まります。まず%d"10"にマッチしてa10が代入されます。次に書式中の空白が入力側の空白を読み飛ばし、2つ目の%d"abc"に対してマッチを試みますが、数字が1つも現れないため代入前にマッチ失敗となり、bは変更されません(初期値の-1のまま)。sscanfの戻り値は「実際に代入できた変換指定の数」なので、ここでは1になります。この戻り値を確認せずにbを使ってしまうと、失敗した変換に対応する変数が更新されていないことに気づけません。