2013-12-19 4 views
0

Я использую цикл for для итерации через некоторые массивы, которые я создал, представляющие области, над которыми может нависнуть мышь. Затем, когда цикл подтверждает, что мышь находится в области, она сохраняет переменную итерации общедоступной переменной, которая используется позже в основной функции, чтобы выделить область, в которой находится мышь. Проблема в том, что цикл for не дает правильного значения для первой итерации.Нечетный вывод из цикла for

{ 
//mouse offsets 
int x = 0, y = 0; 
//if mouse moves 
if (event.type == SDL_MOUSEMOTION) 
{ 
    //get the mouse co-ords 
    x = event.motion.x; 
    y = event.motion.y; 

    for (int grid = 0; grid <= sizeof(grid_region); grid++) 
    { 

     if ((x > grid_region[grid].x) && (x < grid_region[grid].x + GRID_WIDTH) && (y > grid_region[grid].y) && (y < grid_region[grid].y + GRID_HEIGHT)) 
     { 
      //set highlight region 
      highlight = grid; 
     } 
    } 
} 

}

grid_region это делается с помощью "Int grid_region [9];" и странная часть заключается в том, что когда я позже делаю оператор печати, чтобы увидеть, что «выделить», когда оно находится в grid_region [0], это отпечатки 72. Как возможно, что итерационная переменная становится 72 в любой точке цикла? Любая помощь здесь? Позже я использую выделение, чтобы применить спрайт в grid_region, и он применяется неправильно, так что это проблема.

+0

Одна из проблем, которые я вижу, - это тест во внешнем цикле, вероятно, это будет 'grid

ответ

2

sizeof(grid_region) - в кратных char, а не количество элементов.

То есть, это sizeof(int) * 9, а не девять, и, видимо, ваш char S широкий, так как вы оказались на 72.

Вы можете цикл в < sizeof(grid_region)/sizeof(grid_region[0]) или, лучше, шаг в 21-м веке и использования std::vector, или std::array, если ваш компилятор достаточно беден.

+0

'std :: vector' так 1998 -' std :: array' - выбор модного программиста для последовательностей статического размера. – Casey

+0

@Casey Я, как правило, забываю о C++ 0xb, так как код, который я ежедневно работаю, является древним. Добавлено ответ на модный ответ. – molbdnilo

Смежные вопросы