あとで、出てくるstrlen関数のために、string.hが必要です。
main関数内は、特に説明の必要はないですね。
scanf関数で、文字列の入力を受け取る方法をよく覚えてください。
また、自作関数check_isbn()の戻り値を変数retに代入して、 利用している様子を見てください。
switch文により、retの値により実行される内容が異なります。
最初(第8章)で、結果表示のための関数を作ると、言いましたが この、入力関数のところで結果表示もしてしまいました。
この関数の戻り値は、呼び出し側関数(この場合は、main関数)で
利用されていないので、この関数(input_isbn)の戻り値は
あえてint型である必要はありません。(void型にした場合、最後の
return 0;はまずい!0をとってreturn;にしてください)
int型の配列suuchiの宣言の仕方を覚えてください。 これは、int型の変数suuchi[0],suuchi[1],...suuchi[9]があると思えばよい。
strlen関数は、引数となる文字列の長さを返す関数です。この「長さ」の中には 「\0」は、含まれません。また、この関数を使うには、string.hが必要なので 最初のところで、includeされています。
最初のfor文で、先ほどのsuuchi配列に、入力された文字列を先頭から 1桁ずつ、数値に直して代入しています。この場合、{}は無くてもよいです。
次のfor文では、それぞれの数値を先頭から10倍、9倍、8倍・・・して、 gokeiに加えていっています。最初のfor文とまとめて1つにしてもいいですね。 それと、gokeiの出し方は、もう少しスマートな方法があります。これも、あとで 演算子のところで解説します。
if文のところは、意味が分かりますか?
この関数は、いろいろなところで、いろいろな数値を返しています。
こうすることにより、呼び出し側関数は、check_isbn関数の中で
起こったことを知ることができます。
さて、このプログラムは1回実行するごとに終了してしまいます。
いろいろな、ISBNを入力して、正しい番号かどうかチェックするには
不便ですね。番号を入力して、判断が出たあと、続けて次の
番号入力をするかどうかを聞くように作り替えてみてください。
Update Oct/24/1996 By Y.Kumei