2013-06-20 1 views
0

나는 이와 같은 경험이 전혀 없다. 나는 작은 프로그램을 디버깅하는 데 도움이되는 cout 문을 사용하고 있었고 코드에 만족했다면 주석을 주석 처리했습니다. 이제 코드가 더 이상 작동하지 않습니다. 다음은 주석이있는 코드입니다.cout 문을 주석으로 처리하면 결과가 달라진다 (정확하지 않은 경우)

이 프로그램의 목적은 하드 코딩 된 부울 2 차원 배열을 테스트하여 각 행에 홀수 개의 참 (true) 명령문을 갖는 것입니다. 따라서 첫 번째 배열은 true를 반환하고 두 번째 배열은 false를 반환해야합니다. cout 문을 주석 처리하여 둘 다 대신 false를 반환합니다.

#include <iostream> 

using namespace std; 

template <size_t size_y> 
bool findEvenDegrees(bool mapArray[][size_y]) 
{ 
    bool returnValue; 
    for (int x=0; x<size_y; x++) 
    { 
     int result = 0; 
     for (int y=0; y<size_y; y++) 
     { 
      result = result + mapArray[x][y]; 
      //the line below causes the problem 
      cout << mapArray[x][y] << "\t" << result << "\t" << x << endl; 
     } 
     if (result%2 == 1) 
     { 
      returnValue = false; 
      break; 
     } 
    } 
    if (returnValue== false) 
    { 
     return returnValue; 
    } 
    else 
    { 
     return true; 
    } 
} 

int main() 
{ 
    bool array1[][6] = 
    { 
     {false,true,true,false,false,false}, 
     {true,false,false,true,false,false}, 
     {true,false,false,true,false,false}, 
     {false,true,true,false,true,true}, 
     {false,false,false,true,false,true}, 
     {false,false,false,true,true,false} 
    }; 
    bool array2[][8] = 
    { 
     {false,true,true,false,false,false,false,false}, 
     {true,false,false,true,false,false,false,false}, 
     {true,false,false,true,false,false,false,false}, 
     {false,true,true,false,true,false,false,false}, 
     {false,false,false,true,false,true,true,false}, 
     {false,false,false,false,false,true,false,true}, 
     {false,false,false,false,true,false,false,true}, 
     {false,false,false,false,false,true,true,false} 
    }; 
    bool answer1 = findEvenDegrees(array1); 
    bool answer2 = findEvenDegrees(array2); 
    if (answer1 == true) 
    { 
     cout << "Array 1 has a even degree for every switch." << endl; 
    } 
    else 
    { 
     cout << "Array 1 has a odd degree for at least one switch." << endl; 
    } 
    if (answer2 == true) 
    { 
     cout << "Array 2 has a even degree for every switch."; 
    } 
    else 
    { 
     cout << "Array 2 has a odd degree for at least one switch."; 
    } 
    return 0; 
} 
+0

는 [cout'은'부분을 주석. (http://coliru.stacked-crooked.com/view?id=94e5c41fe17a9a5f86815122c813b6a8-f674c1a6d04c632b71a62362c0ccfc51) –

+0

어느 size_y '! = X || size_y! = y'. 그들은 당신이 당신의 메인에 부울 배열에서 볼 수있는 것과 같은 크기가 없습니다. – mr5

답변

2

returnValue은 절대로 초기화하지 않습니다. false으로 시작하면 그대로 유지되며 함수는 false을 반환합니다.

1

첫째, 나는 조금 코드를 정리하고, 도착 : 내가 처음 홀수도 행을 발견했을 때 그것을 정리하는 과정에서

#include <iostream> 

template <size_t S> 
bool findEvenDegrees(bool (&themap)[S][S]) { 
    for(bool(&row)[S]: themap) { 
    bool is_degree_odd = false; 
    for(auto col: row) 
     is_degree_odd ^= col; 
    if(is_degree_odd) 
     return false; 
    } 
    return true; 
} 

int main() 
{ 
    using std::cout; 
    using std::endl; 

    bool array1[6][6] = { 
    {false,true,true,false,false,false}, 
    {true,false,false,true,false,false}, 
    {true,false,false,true,false,false}, 
    {false,true,true,false,true,true}, 
    {false,false,false,true,false,true}, 
    {false,false,false,true,true,false} 
    }; 
    cout << "Array 1 has an " 
    << (findEvenDegrees(array1) ? "even degree for every" : "odd degree for at least one") 
    << " switch." << endl; 

    bool array2[8][8]= { 
    {false,true,true,false,false,false,false,false}, 
    {true,false,false,true,false,false,false,false}, 
    {true,false,false,true,false,false,false,false}, 
    {false,true,true,false,true,false,false,false}, 
    {false,false,false,true,false,true,true,false}, 
    {false,false,false,false,false,true,false,true}, 
    {false,false,false,false,true,false,false,true}, 
    {false,false,false,false,false,true,true,false} 
    }; 
    cout << "Array 2 has an " 
    << (findEvenDegrees(array2) ? "even degree for every" : "odd degree for at least one") 
    << " switch." << endl; 

    return 0; 
} 

, 나는 효과적으로 반환함으로써 if(result%2 == 1) { resultValue = true; break; }을 제거 . resultValue 변수를 없애면서 @sth에 언급 된 "unitialized"버그도 삭제했습니다.

+0

+1 - 훨씬 좋네요 :-) –

관련 문제