Namaran

Code daily. Without assist.

2026-09-21

parse_pair.c

#include <stdio.h>

// write this: parse two ints out of `line` with sscanf, writing them to
// *a and *b. Return 1 if both were parsed, 0 otherwise -- check sscanf's
// own return value, don't just trust that *a and *b were set.
int parse_pair(const char *line, int *a, int *b) {
}

parse_pairを実装してください。sscanfの戻り値を確認し、2つとも読み取れたときだけ1を、そうでなければ0を返すこと。

Reference
int parse_pair(const char *line, int *a, int *b) {
    return sscanf(line, "%d %d", a, b) == 2;
}

sscanfの戻り値は「実際に代入できた変換指定の数」であり、*a*bが書き換わったかどうかを保証する唯一の手がかりです。呼び出し側が戻り値を見ずに*a*bをそのまま使うと、入力が数値でなかった場合や入力が途中で終わっていた場合に、書き換わっていない(呼び出し前の)値をそのまま使ってしまいます。ここでは期待する変換数(2)と一致するかどうかを比較するだけで、この確認を関数の中に閉じ込めています。これは参考実装であり、唯一の正解ではありません。