スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

かつて戦ったバグ2

さて、今日は自分がプログラミングでやらかしたミスを紹介しようと思います。(2回目)

【バグNO.4】 表示方法の例外
w-------ww-------ww-------w概略コードw-------ww-------ww-------w
int x = 3;
int y = 2;
printf("3 + 2 = %dです。\n",x+y); /*和を表示*/
printf("3 - 2 = %dです。\n",x-y); /*差を表示*/
printf("3 * 2 = %dです。\n",x*y); /*積を表示*/
printf("3 % 2 = %dです。\n",x%y); /*余りを表示*/

w-------ww-------ww-------w概略コードw-------ww-------ww-------w
これは、3と2の和・差・積・余りを表示させるプログラムなのですが、間違ってます。
参考までに、実行結果はこちら。
3 + 2 = 5です。
3 - 2 = 1です。
3 * 2 = 6です。
3  = 1です。

見れば分かりますが、余りを表示させる部分だけおかしなことになっています。
結論から言いますと、printf文で上記の文字を表示させる場合、"%"だけは例外で、"%%"と表記しなければいけません。(他にも"\"などがあります)
つまり、正しくはこうなります。⇒  printf("3 %% 2 = %dです。\n",x%y);

【バグNO.5】 反応しないswitch文
w-------ww-------ww-------w概略コードw-------ww-------ww-------w

srand((unsigned)time(NULL));
flag = rand () % 4;

switch(flag){
case '0':printf("あ\n");break;
case '1':printf("い\n");break;
case '2':printf("う\n");break;
case '3':printf("え\n");break;
}
w-------ww-------ww-------w概略コードw-------ww-------ww-------w
これは、0~3までの値をランダムに発生させ、それぞれ場合分けして処理を実行するものです。
(0なら"あ"、1なら"い",2なら"う"3なら"え"と表示。)
ですが、何度実行しても文字が表示されることはありません。
おまけに、これのせいで2時間ほど悩みました。(自分は何をやっているんだ)
何が原因かというと、数字を囲っている" ' "が要らないのです。
"'"で囲うと数値ではなく、文字になります。自分の処理系では
'0' = 48
'1' = 49
'2' = 50
'3' = 51
となっておりますので、絶対に一致しない訳です。(0~3 ≠ 48~51)
キーボードから0~3を入力する時文字なので、"'"が要ります。

【バグNO.6】 凡ミス
w-------ww-------ww-------w概略コードw-------ww-------ww-------w
for(int i = 1; i => 10; i++)
  printf("%d\n",i);
w-------ww-------ww-------w概略コードw-------ww-------ww-------w
慣れていれば直ぐに分かるミスです。不等号がアロー演算子みたいになってます。
(アロー演算子はコレ→"->"詳しい説明は省略)
C言語を始めたばかりのときは=の右だっけ?左だっけ?とか迷っていたのです。
初心者の頃は情けないミスが多かった(´・ω・`)
スポンサーサイト

テーマ : 日記 - ジャンル : 日記

コメント
コメントの投稿
管理者にだけ表示を許可する



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。