リザード「今回の仕事は、この箱の中に入っているそうだ。」
ルギア君「えっ!? この箱はりんごが入っているんじゃないの?」
リザード「では、開けてみようか。魔法はここにあるよ。」
ルギア君「, −,. (ファギクンジェルバ、フォーディルンジェルダ、ディクネジェ。)」
すると、箱がひっくり返って、中から紙っペらが出てきた。
その紙には
小麦粉がなかったのをすっかり忘れてた・・・。とってきてもらえないかな?
と書いてあった。
リザード「というわけだ。じゃあ、今回も箱を用意して小麦粉を入れて持っていってあげな。魔法はこれだ。」
ルギア君「− . (バゲージェ セタミッセケボセ イェ ペアク ダガ。)」
リザード「うん。」
ルギア君「 − . (セタミッセケボセ クセーガ ペン ジルン ドン シッゲマドタ)」
すると、プラスチックの箱が出てきて中に小麦粉が入った。
リザード「じゃあ、持っていってあげな。」
ルギア君「うん。」
・・・
キノガッサ「おっ、またまたありがとう。開けてみるね。」
ルギア君「うん。」
キノガッサ「, −, . (ファギクンジェルバ、フォーディーンジェルバ、セタミッセケボセ。)」
すると、中から小麦粉が出てきてテーブルの上にばらまかれた。
まとめ
さて、今回からは、変な議論は抜きにしてサクサクと進めていきましょう。
今回は数えられないものをいれるための箱についてです。
まず、"ざる"を思い浮かべてください。
次に"ペットボトル"を思い浮かべてください。
最後に"分厚いコンクリートでできた入れ物"を思い浮かべてください。
ざるにはリンゴを入れておくことができます。
ですが、水は入れておくことができませんよね。
ペットボトルは口が狭すぎてリンゴを入れることができません。
しかし、水を入れておくことができます。
放射性物質はざるに入れても、ペットボトルに入れても危険なため、分厚いコンクリートの入れ物に入れます。
コンクリートの入れ物には水やリンゴを入れておくこともできますが、持ち運びに不便なので日常的には使われません。
このように、C言語でも、箱の種類がいくつかあって、前に「数えられるものを入れる箱」を勉強しました。
今回は流れる水のような「数えられないものを入れる箱」です。
この他にもいくつかあります。
では、数えられないものを入れる箱を用意しましょう。
こう書きます。
float flower_box;
あっ、flower は「花」ではなく「小麦粉」のことですよ。
物語りの呪文は 3.4kg の小麦粉を入れるようになっていますので、
flower_box = 3.4;
で、3.4kg の小麦粉が入ります。
それを、ばらまく(画面に表示する)魔法は
printf("%f\n", flower_box);
で %d の d が f になってますね。
ところで、物語ではキノガッサからメッセージをもらいました。
このことは実際にできます。
まず、
int main(void) {
のところを
int main(int argc, char* argv[]) {
に変えてください。
ちなみに、本によっては
int main(int argc, char** argv) {
と書いてあることもあります。もちろん、おなじ意味です。
深い意味はまた後で教えます。
こうすることで、キノガッサからのメッセージを受け入れる体制ができます。
printf("%s\n", argv[1]);
とすると、メッセージの内容をそのまま画面に表示できます。
argv[1] の 1 をいろいろ変えて試してみてください。
で、できたプログラムは
となります。
箱を用意する魔法は、たくさん箱を用意する時に、あっちこっちにちらばっていると、困るというためか、最初に書くという決まりになっています。
(最近は寛容になってはいますが。)
ビルドしたら実行してみましょう。
Visual C++ 2005 の場合 *1
[プロジェクト]→['Sample01-004'のプロパティ]を開いてください。
[実行]のところにある[実行時引数*2]に
"小麦粉を持ってきてね キノガッサより"
と書いて OK を押してください。
ダブルクオーテーションも忘れずに。
ためしに、ダブルクオーテーションをはずしてみるのもいいかもしれません。
これをいろいろ変えてやってみてください。
Mac OS X, Linux の場合
$ Sample01-004.out "Please give me some flower, won't you? -Breloom"
とすると、実行できます。
日本語が入力できる場合は日本語でも入力してみてください。
この結果は
argv[0] → Sample01-004
argv[1] → Please give me ... -Breloom
ダブルクオーテーションをはずすと、
argv[0] → Sample01-004
argv[1] → Please
argv[2] → give
argv[3] → me
...
argv[8] → -Breloom
となるかとおもいきや、
>
とだけでてくるとおもいます。(場合によっては違うかも)
これは won't の ' が原因です。
' とだけ打ってエンターキーを押すと、進みますが、
7 や 8 を設定しているとエラーになります。
argv[0] → Sample01-004
argv[1] → Please
argv[2] → give
argv[3] → me
...
argv[6] → wont you? -Breloom
ですから。
最後は、' ' で囲まれた (ダブルクオーテーションとおなじ効果)ようになってます。