【问题标题】:commenting out cout statement causes different (and incorrect) output注释掉 cout 语句会导致不同(和不正确)的输出
【发布时间】:2013-06-20 03:04:28
【问题描述】:

我从来没有经历过这样的事情。我正在使用 cout 语句来帮助我调试一个小程序,一旦我对我的代码感到满意,我就将 cout 注释掉了。现在,代码不再有效。下面是注释掉cout的代码。

该程序的目的是测试两个硬编码的布尔二维数组在每行上是否有奇数个真实语句。因此,第一个数组应该返回 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;
}

【问题讨论】:

标签: c++ multidimensional-array


【解决方案1】:

你永远不会初始化returnValue。如果它恰好以false 开头,它将保持这种状态并且函数将返回false

【讨论】:

    【解决方案2】:

    首先,我稍微清理了您的代码,然后得出:

    #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 提到的“未初始化”错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 2015-01-08
      相关资源
      最近更新 更多