失敗から学ぶ(その後)
前回のエントリー「失敗から学ぶ」のその後を書いていなかったので、簡単にメモ。
なぜうまく動かなかったのかの追求はせず、プログラムを関数を使って書き直した。それでうまく動いた!と思いきや、うまく動かない場合がある。内容は24時制の時分表示の各桁をひとつずつ切り出すところ。ここを剰余演算子(%)を使って書いていた。
いろいろと悩んだ挙句、同じプログラムを別のオフライン環境(1)にコピーし、printf()で各段階の値を表示されるデバッグ手法を使ったところ、剰余が正しく計算されていないと判明。思い当たってのは24時制の午前は時間が0で始まる。Cでは0で始まる数値は8進数を解釈されるので、例えば0700は7*8^2と解釈されてしまう、と判った。
この修正はまだ実施していないが、今回のエラーについてはこの理解で正しいと思われる。なお、時分を切り出す方法はもっとスマートな方法がありそうな気がするので、Cの勉強が進めば改善できるかもしれない。
学んだこと:
・Cでは、0で始まる数値は8進数と解釈される。
(1) Visual Windows for BC++