2012-03-04 7 views
0

スクリプトをデバッグしたときに実行時に問題が発生しました。実行時エラー - ゼロ除算

それは言う:

Unhandled exception at 0x002a4f8e in test2.exe: 0xC0000094: Integer division by zero. 

問題のラインがランドの数世代ですが。それがうまくいかないとき

if((rand() % miss) < 3){ //line 40 
    int phit = (rand()% hit); 
} else { 
    bool pmiss = true; 
} 

は、デバッガは、(私は上記のラベルがある)40行で停止します。

私の完全なスクリプトはここにある:これは、このようなエラーが発生した場合 http://www.paste.to/MzQ1ODM1

私はif文を書かれている必要がありますどのように、私は適応するv.frustratingされるPHPプログラマーのように考え続けます!

+6

で宣言されたものを変更しないことを意味場合は範囲​​内の新しいローカル変数ミスを宣言しています問題はほぼ確実に「ミス」がゼロに等しいことである。 –

+0

'miss'の値は何ですか? –

+0

@OliCharlesworth私は完全なスクリプトへのリンクをアタッチしました。私はifステートメントの間に値を取得しますが、私はグローバルに変数を設定します。=/ 値のミスは5です。 – Sir

答えて

5

missを30行目に再宣言しています。この変数は、ステートメントの場合は、のローカル変数になります。 したがって、グローバルmissは、依然としてゼロの値を有する。 と、ifの文内にあるboolをすべて削除してください。このように:

      if(user_weapon == 'k'){ 
            miss = 5; 
            hit = 5; 
          } else if(user_weapon == 'b'){ 
            miss = 2; 
            hit = 3; 
          } else { 
            invalid = true; 
          } 
+0

ああ、それに気づいていない。 +1。それ以外の場合は、最初は0で始まらないことをお勧めします。 –

+1

また、 'invalid'の前の' bool'も行かなければなりません。 – celtschk

+0

ああそうだ!それは本当にかなり厳しい言語です。//PHPを最初に学ぶのは悪いと思っています=/ – Sir

0

%(モジュラス)は除算の残りの部分です。だからあなたは%bでaをbで割り、それから残党を得ます。 bが0の場合(この場合のように)、エラーが発生します。
0で除算すると、偽装され、宇宙の乱れ(またはコードクラッシュ)が発生します。
変数を別の値に設定してみてください。

+0

私は完全なスクリプトをアタッチしました。なぜなら、変数が設定されていないのですが...理由はわかりません... – Sir

+0

ifステートメントがバグかもしれません。開始時に9999999に設定してください私はそれが(一時的に)それを修正する場合 –

1

ライン29と32は

miss = 5 

miss = 2 

する必要がありますあなたが行6

+0

逆に、これらのローカル変数はifで終了しますが、6行目ではvarが変更されません。したがって、6行目のvarは0のままです。解決策は同じです –