2013-12-19 3 views
0

for 루프를 사용하여 마우스를 가져갈 수있는 영역을 나타내는 일부 배열을 반복 실행했습니다. 그런 다음 루프가 영역에 있음을 확인하면 반복 변수를 나중에 주 함수에서 사용되는 공용 변수에 저장하여 마우스가있는 영역을 강조 표시합니다. 문제는 for 루프가 첫 번째 반복에 대해 올바른 값을 제공하지 않는다는 것입니다.for 루프에서 홀수 출력

grid_region 비아되어있다

{ 
//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; 
     } 
    } 
} 

} "의 INT grid_region [9]" 이상한 부분은 나중에 grid_region [0]이 print 72 일 때 "강조 표시"가 무엇인지 확인하기 위해 print 문을 수행 할 때입니다. 반복 변수가 루프의 어느 지점에서나 72가 될 수있는 방법은 무엇입니까 ??? 도움이 필요 하신가요? 나는 나중에 grid_region에서 스프라이트를 적용하기 위해 하이라이트를 사용하는데 이것은 잘못 적용되어 문제가됩니다.

+0

바깥 쪽 for 루프의 테스트에서 볼 수있는 한 가지 문제점은 아마도'grid

답변

2

sizeof(grid_region)char의 배수로, 요소 수가 아닌 입니다. 이다

, 더 나은, 21 세기 및 사용에 단계, 그것은 sizeof(int) * 9이 아닌 구, 그리고 분명히 당신의 int는 72

할 수 있습니다 루프 < sizeof(grid_region)/sizeof(grid_region[0]) 또는에서 결국 이후 8 char 넓은 s입니다 std::vector 또는 std::array입니다.

+0

'std :: vector' 일 것입니다. 1998 -'std :: array'는 세련된 프로그래머의 선택입니다. 정적 크기의 시퀀스의 경우 – Casey

+0

@Casey 저는 매일 같이 일하는 코드가 고대이므로 C++ 0xb를 잊어 버리는 경향이 있습니다. 대답에 패션 진술을 추가했습니다. – molbdnilo