初歩的な間違いということでつらいものだが、数時間つまづいてようやく問題解決に至ったので、そのことを書いておきます。

柴田望洋の『新版 明解C言語 入門編』のList 6-4を勉強にと思ってプログラムをそのまま書いて、コンパイル。
ところが、その結果が、


$プログラミングでもやってみよう

一応全体では次のようになってる。

$プログラミングでもやってみよう

こんなことに。実数を入力して、それから整数を入力すると、実数を整数乗した結果がでるはず。そのはずが整数の入力がされないままに、勝手に数値が入力されてしまう様子。エラーも出ないで実行されてしまう。

んーーなんだろうと思ってずっと考えたり、もう一度入力しなおしたりしていたが、やっぱり同じエラーが。List 6-5は乗数計算の関数を別の仕方で短く書いたものなので、それも入力してコンパイル。実行をしてみた。これでも同じエラー。……だとすると、main関数のほうなのか。望洋の本と見比べてじっくりと一致確認をしていくがわからないまま。あやしそうなのは数値入力のところ。scanfのあたりが怪しい。だが、それでもわからない。

そうなると責任転嫁となる。これは望洋本の誤植に違いない。ということで、List 6-4 誤植というキーワードで検索してみる。これで犯人がわかるはずだ。……だが、残念なことに検索結果はノーヒット。該当するような誤植の指摘はない。やっぱり入力間違いの可能性が高くなる。int double、%dとかの入力間違いを再度チェック。しかしやっぱり出てこない。


あ、わかった。本には次のように実数値の入力部分が書かれている。

scanf("%lf", &x);

これを間違って、

scanf("%1f", &x);

と入力してしまっていたのだ。望洋本のフォントだと、エルの小文字は「1」に非常に近く、頭の部分が曲がっていて、下に横棒がある。くそー。クレームもんだよな。

実際に二つのフォントの比較をしてみよう。フォントは太文字になっていて、同じフォントでエルと1が出ているページを探してみた。256ページにs1という文字列名とwhileが太文字で出ていた。1とエルはやっぱりかなり似ていた。

常識がないのが問題だけど、フォントとしてもわかりにくいよな。

検索途中で、ライフゲームというのを見つけた。

http://d.hatena.ne.jp/ichirin2501/20100224/1267016447

C言語なので、コピーして、学習用C言語開発環境最新版で実行。
残念ながら、画面で流れていってしまい、実行状態はよくわからない。
数値が増えているのはわかるが、画面が下から上へ流星のように流れている。
これが別の意味できれいに見える。

みていたらこのブログは面白い。プログラミングの話が中心だが、数学関連の話もあって、OEISについて触れられていた。整数に関するデータベースサイトらしい。

http://www.research.att.com/~njas/sequences/

日本語版もあるが、かなり限定されているとのこと。
C言語入門といえばprintf。文字列を出力してくれる関数、stdio.hで宣言されてる関数。初心者用として説明されながら、本当は攻撃される可能性があるから、実用的ではないのだ、こんな具合の説明。なんでそれなら最初から使わないでおかないのだろう。。疑問を感じる。

printfとはprint formatの略。可変引数を持つ関数で、プロトタイプのチェックがされないのが重要らしい。その為に、逆引き大全では、引数を指定しないprintfをコンパイルしてもエラーが出ないのだと指摘している。

http://ja.wikipedia.org/wiki/Printf

可変引数を持つ関数としては、他にvastart(), va_end(), va_arg, vfprintf(), vprintf(), vsprintf()がある。
C言語逆引き大全500の極意を見ていたら、0xdeadbeafというのが出てきた。「死肉」というタイトルのコラムでなんだろうとちょっとビビる。これで間違って画像検索したら。。

コラムの人が言っているように、よく見るとbeafでbeefとは違っている。牛というわけじゃないらしい。これは一応16進数に収まった英語表記になっていて、マジックナンバーやフラグとして使われるということ。hogeなんかと一緒なのだろう。

検索をかけてみるが、0xdeadbeafについては細かい話は日本語では出てこない。無意味な数値で埋めるために0xdeadbeafが使われるような例として使われるぐらい。その他だと、0xdeadbeafという名前でOKWaveのユーザー登録があったり、ブログのurlに使われていたりするぐらい。日本語情報はまったく不足してます。でもおそらく学校とかではつかわれるんだろうなあ。。

http://logsoku.com/thread/pc11.2ch.net/os/1213802731/401-500

を見ていたら、0xdeadbeaf以外にも0xcafebabeというのがあるらしい。0で埋めるとわかりにくくなるのを回避するため。
PHPをやろうと思っていたが、配列とかがわからない。
そこで前に買っていた『C言語ポインタ完全制覇』を見つけ出して、
久々に読んでみた。うーん、前よりもわかりそうだ。
ということで、数日間、飛ばし読みをしておいて、
柴田望洋の『明解C言語入門編』を電車で読むことにする。

ひとりよがりの妄想かもしれないが、なんかイケそうな感じである。
でも面倒なのがソフトだ。Cのコンパイラを入れないといけないので、
Linuxでやるか、Windowsにソフトを入れるか。。
迷った挙句に窓の杜の学習用C言語開発環境というソフトを発見。
さっきインストールしたばかりだが、柴田のプログラムを一つ入力。
正の整数を入力すると、その数まで数え上げ表示をする。
実行してみたら、うまくいった。

まあ、とりあえずの開始としてはこういうソフトもいいかもしれない。
ちょっと楽し過ぎな感も否めないけど。
『ノン・プログラマのためのPHP入門 10日間コース』のボーリングの計算があって、それが以前から引っかかっていた。配列についての説明がさらりと終わって、ボーリングの10フレームをrand関数で出していき、それを配列として出す。さらに、ボーリングの結果の計算、そして結果全体を表組をするというもの。

引っかかっていたのは、配列の部分での結果が出てくる流れ。if文で10フレーム目と1-9フレーム目までを分け、ループで1-10フレームの結果を配列として出す。この当たりの流れがわかっていなかった模様。

『PHP逆引きレシピ』を手にとって、配列の当たりを参照した。