C:输入if语句后如何递增

时间:2014-11-17 08:06:54

标签: c increment

当我的计数器达到值51时,我试图输入一个if语句,然后在if语句中增加计数器,使其永远不再为真:

void imu_raw_handler (const lcm_recv_buf_t *rbuf, const char *channel,
               const imu_raw_t *msg, void *userdata) {
    for(counter = 1; counter < 51; counter++)
    {
        gyro_roll = (gyro_roll + gyro_roll_old*(counter-1))/counter;
        gyro_pitch = (gyro_pitch + gyro_pitch_old*(counter-1))/counter;
        gyro_yaw = (gyro_yaw + gyro_yaw_old*(counter-1))/counter;
        accel_x = (accel_x + accel_x_old*(counter-1))/counter;
        accel_y = (accel_y + accel_y_old*(counter-1))/counter;
        accel_z = (accel_z + accel_z_old*(counter-1))/counter;
    }
    if (counter == 51){
    // set zero points
        axo = accel_x;
        ayo = accel_y;
        azo = accel_z;
        gro = gyro_roll;
        gpo = gyro_pitch;
        gyo = gyro_yaw;
        printf("Ready for Takeoff\n");
        counter++;
    }
}

编辑:我的主要功能如下所示。只要它正在运行,它就应该订阅流主题。我将计数器定义为全局变量。

int main()
{
    lcm_t *lcm = lcm_create(NULL);

    imu_raw_t_subscribe(lcm, "IMU_RAW", imu_raw_handler, NULL);
    // Enter read loop
    while (1) {
        if(!lcm_handle_timeout(lcm, 1000)) {
            printf("Failed read from IMU_RAW channel\n");
        }
    }

    lcm_destroy(lcm);
}

但是这会反复打印我的信息而不是使counter = 52并且再也不会发生。为什么这不起作用?

3 个答案:

答案 0 :(得分:1)

问题最有可能存在于这些代码段之外。请检查您是否在其他地方没有打印件。

答案 1 :(得分:0)

问题是因为您在一段时间内调用该函数,并且因为

for(counter = 1; counter < 51; counter++)

计数器将再次变为51(每次调用该函数时),然后将再次输入if (counter == 51)。 要解决这个问题,你可以声明一个全局变量int ok = 0;并像这样使用它:

void imu_raw_handler (const lcm_recv_buf_t *rbuf, const char *channel,
               const imu_raw_t *msg, void *userdata) {
    for(counter = 1; counter < 51; counter++)
    {
        gyro_roll = (gyro_roll + gyro_roll_old*(counter-1))/counter;
        gyro_pitch = (gyro_pitch + gyro_pitch_old*(counter-1))/counter;
        gyro_yaw = (gyro_yaw + gyro_yaw_old*(counter-1))/counter;
        accel_x = (accel_x + accel_x_old*(counter-1))/counter;
        accel_y = (accel_y + accel_y_old*(counter-1))/counter;
        accel_z = (accel_z + accel_z_old*(counter-1))/counter;

    }
    if (ok == 0){ //will enter here once, only if you don't modify the ok anytime
    // set zero points
        axo = accel_x;
        ayo = accel_y;
        azo = accel_z;
        gro = gyro_roll;
        gpo = gyro_pitch;
        gyo = gyro_yaw;
        printf("Ready for Takeoff\n");
        ok = 1; //this will be done once
    }
}

我希望这是正确的。

答案 2 :(得分:0)

for使用if变量之前的counter循环,因此每次循环结束时,counter将为51

我的猜测是循环不应该存在,它似乎没有任何意义。