スポンサーサイト

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

かつて戦ったバグ達

新しくカテゴリを作ってみました。
ここでは、 自分がプログラミングでやらかしたミスを紹介しようと思います。(何かの参考になるかな、と
余裕がある方は、解答を見る前に何が違うのかを考えると勉強になるかもしれません。

【バグNO.1】 終わらない∞ループ
w-------ww-------ww-------w概略コードw-------ww-------ww-------w
for(int i = 0; i < 10; i++){
   for(int j = 0; j < 10; i++){
     処理A
    }

w-------ww-------ww-------w概略コードw-------ww-------ww-------w

これは、何が違うかと言いますと、 二重ループの内側で、j++とするべき所をi++にしています。
変数 j は、永遠に増加しないので、終わりません。
for文を2度書くのが面倒で、コピーペーストした結果こうなりました。(修正忘れに注意)


【バグNO.2】 要らない一文
w-------ww-------ww-------w概略コードw-------ww-------ww-------w
void Sum(int x, int y)

 printf("%dと%dを足すと、%dです。",x, y, x+y);
 return(0);

w-------ww-------ww-------w概略コードw-------ww-------ww-------w

この"Sum"という関数はxとyの足した値を表示する、というものです。
で、この関数は見ての通り、戻り値が"void" (値を返さない)に指定してあるのですが、
何故か最後にreturn文(値を返す)があるので エラーになりました。
これを書いた頃は、 最後にreturn(0)を書くのがルールだと勘違いしていたのです。

【バグNO.3】 まともな動作をしないif文
w-------ww-------ww-------w概略コードw-------ww-------ww-------w
if(x > 100) flag = 1;     /* x>100の時、処理A */
if(x <= 100)flag = -1;    /* x<=100の時、処理B */

if(flag){
  処理A
}else{
  処理B

w-------ww-------ww-------w概略コードw-------ww-------ww-------w
これは、x>100の時に処理Aを、x<=100の時に処理Bをさせようとしたプログラムです。
が、 実際は処理Aしか実行されません。

何故かと言いますと、if文は、 0がFALSE(偽)、0以外がTRUE(真)となるからです。
1も-1も"0以外"なので、結果はTRUE。

マイナスの値はなんとなくFALSE(偽)っぽいイメージがあったので、 間違えました。
三(´・ω・`)

今回はこの辺で。
また、時間があれば更新したいと思います! 
スポンサーサイト

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

コメント

bool型とBOOL型の違い

はじめまして…だと思います。ちょっと気になったので、コメントを残してみますね。
WINAPIのBOOL型はint型の置き換えでして、TRUE=1、FALSE=0です。つまり、TRUE、FALSE以外の値が入る可能性があり、TRUE=0以外と思い込んでいると困る場合があります。
どういう事かといいますと、下記のような場合も起こりうる可能性があるということなんですね。この仕様を知らなくて、ドハマりしたことがあります(苦笑)

VOID test(BOOL flag)
{
if (flag == TRUE)
{
// flagがTRUEの場合の処理
}
else
{
// ここで処理が行われても、必ずしもflagの値がFALSEとは限らない
}
}

こんにちは!

こんにちは!恐らく初めましてかなと思います(_ _)
if文は注意しておかないと、バグになりやすそうですね。(色々と細かい規定がありますし)

下の場合は処理Aではなく処理Bが実行されたり、など。

int x = -1;
unsigened y = 1;
if(x < y){
 処理A
}else{
 処理B
}

まだまだ、学習不足な所もありますので、非常に参考になります。
ありがとうございます!(^^)
コメントの投稿
管理者にだけ表示を許可する



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