2013-03-07 3 views
-1

저는 몇 시간 동안이 프로그램의 일환으로 일해 왔습니다. 나는 한 시간 넘게 나를 곤란하게 만든 몇 줄의 코드를 가지고있다. 그것은 단지 이해가되지 않습니다. 나는 선을 반복해서 읽고 내 머리 속에서 생각해야 할 것을 생각하지만, 그렇게하지는 않는다! 아마 내가 간과하고있는 어리석은 실수 일 것이다. (보통 나에게 일어난다.) 또는 수면 부족으로부터/지난 몇 시간 동안 끊임없이 노력하고있을 수있다.이 코드 순서가 제대로 작동하지 않는 이유는 무엇입니까?

프로그램이 상당히 길지만 문제가있는 코드는 몇 줄 밖에 없으므로 필요할 경우 전체를 게시합니다. (각 긴 79 개 문자가되고, 19) 내가 수동으로 설정 문자열 가득, 하나의 벡터가

:


이 좋아, 그래서 여기에이 일을해야 무엇을 아래로 빠른 실행됩니다. 이 1 차원 벡터는 2 차원 벡터로 취급됩니다. 기본으로 유지하려고합니다. 따라서이 문자열 벡터는 줄당 1 문자열로 표시되는 경우 본질적으로 '.'의 사각형 섹션이있는 격자를 만듭니다. 직사각형 섹션을 연결하는 '#'경로가 있습니다. 함수에 전달 된 x와 y 좌표를 얻어야합니다. 그것은 2 차원 벡터처럼 반복하고 위치를 찾습니다. 그 위치의 문자가 '.'가 아닌지 확인합니다. 또는 '#'else이면 char을 X로 변경하여 위치를 표시합니다. 나는 'x'의 위치 인 유효한 x, y 좌표로 테스트를 설정했다. 문제는 프로그램이 실행될 때 vLevel [i] [j] = '.'의 값을 표시합니다. 그러나 어떤 이유로 든 함수가 4 번 더 호출되고 else 문을 넣는 else 문으로 이동하지 않습니다. 그리드가 어떻게 보이는지 보여줍니다.

void markPosition(vector<string> & vLevel, int x, int y){ 
    cout << "x: " << x <<endl; 
    cout << "y: " << y <<endl; 

    bool doubleCheck = true; //extra bool I added for testing purposes 

    for(int i = 0; i < vLevel.size(); i++){ 
      for(int j = 0; j < vLevel[i].size(); j++){ 
        //displays if x and/or y are out of range 
        if (doubleCheck){ 
          if ((x < 0) || (x > vLevel[i].size())){ 
            cout << "X is out of range!" << endl; 
            doubleCheck = false; 
          } 
          if ((y < 0) || (y > vLevel.size())){ 
            cout << "Y is out of range!" << endl; 
            doubleCheck = false; 
          } 
        } 
        else { 
          return; 
        } 

        if ((j == x) && (i == y)){ 
    //////THIS IS THE PROBLEM LOL 
          cout << "match found::: " << vLevel[i][j] << endl; 
          if ((vLevel[i][j] != '.') || (vLevel[i][j] != '#')){ 
            cout << "Located in the blankness" << endl; 
            return; 
          } 

          else { 
            cout << "I don't get reached!!??" << endl; 
            vLevel[i][j] = 'X'; 
            markPosition(vLevel,i-1,j); 
            markPosition(vLevel,i+1,j); 
            markPosition(vLevel,i,j+1); 
            markPosition(vLevel,i,j-1); 
          } 
         } 
       } 
     } 
} 

간격이있어 :

.......                  
....... .......               
.......##.......  ..........................       
....... .......  ..........................       
     .......  ..........................  ..........    
     .......  ..........................#####..........    
         ..........................  ..........    
         ..........................   #    
         ..........................   #    
         #         #    
         #         #    
    ........   # ............    .......    
    ........   # ............    .......    
    ........   # ............ ....  .......    
    ........###############............ ....  .......    
    ........    ............####....        
    ........    ............ ....        

는 Heres는 코드의 부분은 내가 처리 해요 : 백색 공간에 공백이 있습니다 .. 각 라인은 벡터의 문자열입니다 그것을 붙여 넣을 때 엉망이되어서, 나는 그것을 조금 닦으려고 노력했다. 나는 왜 다른 사람을 건너 뛰지 않는지 모르겠다. 내가 말했듯이, 일단 이것이 해결되면 나는 바보가 될 것이라고 확신한다. 나는 수면을 필요로한다.

자세한 정보가 필요하면 알려주세요. 고마워요! 에서

답변

3

봐 :

if ((vLevel[i][j] != '.') || (vLevel[i][j] != '#')) 

항상true로 평가됩니다. 그것에 대해 생각해보십시오.

은 (난 당신이 if((!=)&&(!=)) 또는 if(!((==)||(==)))을 의미 생각합니다.)

+1

드 모르 강의 법칙을 잊고 또 다른 프로그래머. :) – Barmar

+0

담비가 너무 느립니다. 내 휴대 전화에서 그것을 읽지 만, 적절하게 자르고 붙이기 위해 컴퓨터에 로그인해야했습니다. 당신을 위해 빠른 선생님 +1. –

+0

나는 그것을 얻지 못한다 – ModdedLife

관련 문제