Namaran

Code daily. Without assist.

2026-09-14

visit_all.c

#include <limits.h>

void visit(unsigned char c);

void visit_all(void) {
    // write this: call visit exactly once for every value
    // from 0 to UCHAR_MAX, using an unsigned char loop variable
}

unsigned char型のループ変数を使って、0からUCHAR_MAXまでの全ての値についてvisitをちょうど1回ずつ呼ぶvisit_allを書いてください。

Reference
void visit_all(void) {
    unsigned char c = 0;
    do {
        visit(c);
    } while (c++ != UCHAR_MAX);
}

for (unsigned char c = 0; c <= UCHAR_MAX; c++)と書くと、UCHAR_MAXの次は0に戻るので条件が常に真になり、無限ループです。「呼んでから判定する」dowhileにして、後置c++の増やす前の値で判定すれば、UCHAR_MAXを処理した直後に抜けられます。最後にc0へ戻りますが、符号なし型への変換による周回は定義された動作です。これは参考実装であり、唯一の正解ではありません。