c ++ for循环计数器失败

时间:2013-11-14 20:29:28

标签: c++ if-statement for-loop counter

嗨我想在一个简单的1d数组中发生1之后计算零的数量我不知道为什么计数器总是为零。

int main ()
{
    int testarray[9];
    testarray[0] = 0;
    testarray[1] = 0;
    testarray[2] = 1;
    testarray[3] = 1;
    testarray[4] = 0;
    testarray[5] = 0;
    testarray[6] = 0;
    testarray[7] = 1;
    testarray[8] = 1;

    int counter = 0;
    bool white = false;
    bool prevValue =true;
    bool black = true;
    bool check = false;
    int num = 0;

    for (int i = 0; i<8; i++) {
        num = testarray[i];
        if (num == 1)
            white = true;
        else 
            white = false;


        if((white ==true) && (prevValue == false)) {
            if(i == 0) {
                check = true;
                i++;
            }

            else
                check = false;
        }

        else {
            if (check) 
                counter++;
        }
        prevValue = true;

    }

    cout << "Counter: "<<counter;

    return 0;
}

实际实现涉及使用此for循环来检测边缘。我试过弄乱变量,但无济于事。 white = 1,black = 0的原因是因为我使用这个循环来解决基于视觉的问题。任何帮助都会被贬低。

3 个答案:

答案 0 :(得分:0)

因为prevValue总是如此:它永远不会出现在这个块中:

if((white ==true) && (prevValue == false)) {
    if(i == 0) {
    check = true;
    i++;
    }

    else
    check = false;
}

所以因为检查永远不会分配给'true'所以计数器不会增加

答案 1 :(得分:0)

如果我已经理解你需要的是先找1然后计算零的数量。

如果使用标准算法,可以在一个语句中完成。

int counter = std::count( std::find( std::begin( testarray ), std::end( testarray ), 1 ), 
                          std::end( testarray ), 
                          0 );

答案 2 :(得分:0)

因为,使用数组的这个值,check总是为false,并且它必须为true才能允许计数器变量按照你所写的那样递增:

 if (check) 
     counter++; 

另外,你的for循环没有达到testarray [8]的值,你要编写

 for (int i = 0; i<9; i++)

以便从testarray [0]包括到testarray [9]