2016-03-25 18 views
-2

I fmod Funktion anstelle von% auf diesen Code verwenden:% funktioniert nicht nach rand() C++

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

wenn ich% verwenden, variable prob es keinen Wert auf debuger bekommen.

Zweites Problem ist, dass es nie drinnen kommt, wenn ich Haltepunkt auf, wenn ein anderer auf else, und andere auf Shoot = wahr; Der debuger sagt: Der Breakpoint wird derzeit nicht getroffen. Kein ausführbarer Code des Zielcodetyps des Debuggers ist zugeordnet.

Auf anderen Computer existiert das zweite Problem nicht.

Volle Funktion:

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

Haben Sie Ihren Code neu kompiliert? –

+1

Warum würden Sie 'fmod' auf einem' int' verwenden? – Logicrat

+0

Sie sollten '(Wert & 3)' anstelle von '%' oder 'fmod' verwenden. Einige Compiler codieren '& 3' effizienter als'% 4', abhängig von den Optimierungspegeln. –

Antwort

1

Der ursprüngliche Code sollte gut funktionieren. Chancen sind der Debugger sagt Ihnen nicht die Wahrheit; jeder gute Optimierer überspringt das Speichern des Wertes in prob, da es nur ist, das in der Bedingung der if Aussage verwendet wird. Schreiben Sie also den Wert nach der Berechnung prob, um zu sehen, was vor sich geht.

Verwandte Themen