2016-03-25 54 views
-2

工作後,我不得不使用FMOD的功能,而不是%的這段代碼:%不蘭特()C++

int prob = rand();// % 4; 
    prob = fmod(prob,4); 
    if (prob == 0) { 
     shoot = true; 
    } 
    else shoot = false; 

如果我使用%,概率變量不會得到任何debuger價值。

第二個問題是它從來沒有進入內部如果我把斷點放在if上,另一個放在另一個上,另一個放在shoot = true上;該debuger說: :斷點目前不會被擊中。沒有調試器的目標代碼類型的可執行代碼關聯。

在其他計算機上,第二個問題不存在。

全功能:

void cVoladorEstatico::Logic(int *map) 
{ 

    double t1 = glutGet(GLUT_ELAPSED_TIME); 
    if (t1 - moveDelaySteering > 20 * 20) { 
     random_variable = rand(); 
     moveDelaySteering = t1; 
    } 
    if (t1 - moveDelay > 20) { 
     int aux = y; 

     y += random_variable%speed - 3; 

     //Whats next tile? 
     if ((y % TILE_SIZE) <= 1) 
     { 

      /*y += speedY; 
      x += speedX;*/ 
      //si choca con tile, se autodestruye muy fuerte 
      if (CollidesMapWall(map, false)) y = aux; //delete this; 
     } 
     //Advance, no problem 
     else 
     { 
      /*y += speedY; 
      x += speedX;*/ 
      //TODO: si choca, hace magia 
     } 
     moveDelay = t1; 
    } 
    //should i shoot 
    //if (t1 - lastShootDec > shootChance) { 
    int prob = rand();// % 4; 
    prob = fmod(prob,4); 
    if (prob == 0) { 
     shoot = true; 
    } 
    else shoot = false; 
    //} 
} 
+0

你重新編譯了你的代碼嗎? –

+1

爲什麼要在'int'上使用'fmod'? – Logicrat

+0

你應該使用'(value&3)'而不是''''或'fmod'。一些編譯器可能比'%4'更高效地編寫'&3',具體取決於優化級別。 –

回答

1

原代碼應該只是罰款。調試人員沒有告訴你事實真相;任何優化器都會跳過將值存儲到prob中,因爲它是只有用於if語句的條件中。因此,在計算prob後寫出該值以查看發生了什麼。