質問: 9999) break; printf("あなたは%dと入力しましたね。\n", num); } } return (0); } ```
回答: > > *strが真なら0、偽なら1を返すのはわかるのですが、 > > > C言語では、条件判定の場所で数値を指定した場合、0以外を真、0を偽とみなす仕様なので、`return (*str ? 0 : 1)`に関しては、「*strが0以外なら0、0なら1を返す」という意味になります。ただ、それだと一見して条件が判りづらいので、私なら`return *str == '\0'`と書きますけど。 で、それが何をしているのかというと、ソースのコメントには書かれていませんが、「数値なら1、数値以外の文字が含まれていたら0を返す」という仕様を満たすためのコードです。 `strtoi`関数は渡された文字列を先頭から1文字ずつ読み取って処理しています。最終的にすべての文字を処理したら(数値として有効な文字のみで構成されていたら)、`str`ポインタは終端文字(\0)を指し示しますが、もしアルファベットのような数値として認識できない文字が含まれていると、そこで止まることになります。 つまり、`return (*str ? 0 : 1);`は、すべての文字を処理した(=数値として正しく処理できた)か、途中で止まった(=不正な文字が含まれていた)か、を判定して返しているということです。