%在rand()c ++之后不起作用

时间:2016-03-25 14:32:23

标签: c++ visual-studio debugging random visual-studio-2015

我必须在此代码中使用fmod函数而不是%:

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

如果我使用%,prob变量,它在debuger上没有任何值。

第二个问题是它永远不会进入内部,如果我把断点放在if上,另一个放在else上,而另一个放在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;
    //}
}

1 个答案:

答案 0 :(得分:1)

原始代码应该可以正常工作。有可能调试人员没有告诉你真相;任何好的优化器都会跳过将值存储到prob,因为在if语句的条件下只使用 。因此,在计算prob之后写出值,看看发生了什么。