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に戻るので条件が常に真になり、無限ループです。「呼んでから判定する」do〜whileにして、後置c++の増やす前の値で判定すれば、UCHAR_MAXを処理した直後に抜けられます。最後にcは0へ戻りますが、符号なし型への変換による周回は定義された動作です。これは参考実装であり、唯一の正解ではありません。