mbedで遊ぶ

超簡単マイコン(?)mbedで遊んだ記録。

失敗から学ぶ(その後)

前回のエントリー「失敗から学ぶ」のその後を書いていなかったので、簡単にメモ。

なぜうまく動かなかったのかの追求はせず、プログラムを関数を使って書き直した。それでうまく動いた!と思いきや、うまく動かない場合がある。内容は24時制の時分表示の各桁をひとつずつ切り出すところ。ここを剰余演算子(%)を使って書いていた。

いろいろと悩んだ挙句、同じプログラムを別のオフライン環境(1)にコピーし、printf()で各段階の値を表示されるデバッグ手法を使ったところ、剰余が正しく計算されていないと判明。思い当たってのは24時制の午前は時間が0で始まる。Cでは0で始まる数値は8進数を解釈されるので、例えば0700は7*8^2と解釈されてしまう、と判った。

この修正はまだ実施していないが、今回のエラーについてはこの理解で正しいと思われる。なお、時分を切り出す方法はもっとスマートな方法がありそうな気がするので、Cの勉強が進めば改善できるかもしれない。

 

学んだこと:

・Cでは、0で始まる数値は8進数と解釈される。

 

(1) Visual Windows for BC++