第10章 ISBNチェッカーを作ろう(3)


前回は、いろいろ新しいことが出てきて少し難しかった と思うので、今回は、第9章のプログラムを、もう少し わかりやすく説明します。関数ごとに説明します。 わかりにくいときは、部分、部分で見ていけば、 「あー、そーだったのか」と急に理解できるように なることが多いようです。(本当かね?)

あとで、出てくる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を入力して、正しい番号かどうかチェックするには 不便ですね。番号を入力して、判断が出たあと、続けて次の 番号入力をするかどうかを聞くように作り替えてみてください。


[Index][総合Index] [Previous Chapter] [Next Chapter]

Update Oct/24/1996 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。