这个函数逻辑上是不是有问题?

C/C++ code

// 函数本意应该是找出 data 中出现次数最多的值给 bg,出现第二多的值给 fg
// 如 data[] = { 1, 2, 3, 4, 1, 1, 2 } --> bg = 1, fg = 2
        
int func_1(BYTE* data, int w, int h, BYTE* bg, BYTE* fg)
{
    int tileType = 0;
    BYTE pix1 = *data, pix2 = 0;
    int count1 = 0, count2 = 0;
    BYTE end = data + w*h;
    
    for (BYTE* ptr = data; ptr < end; ptr++)
    {
        if (*ptr == pix1)
        {                       // 这里在 loop 1 时恒成立
            count1++;
            continue;
        }
    
        if (count2 == 0)
        {                       // 这里成立时,表示碰到第一个不同的值(与data[0]值不同的第一个值)
            tileType |= 0x01;   // 含有两种以上的值
            pix2 = *ptr;        // 这里把第一个不同的值赋于 pix2
        }
    
        if (*data == pix2)
        {                       // 所以这里第一次执行时,恒不成立,count2不会变
            count2++;
            continue;
        }
        
        tileType |= 0x02;
        break;                  // 接下来就 break 了,count2 恒为0
    }
    
    if (count1 >= count2)
    {
        *bg = pix1; *fg = pix2;
    }
    else
    {
        *bg = pix2; *fg = pix1;
    }
    
    return tileType;
}


count2 恒为0的话,这个函数岂不是失去意义?

作者: id27145   发布时间: 2011-06-14

逻辑是不是有问题要看需求是什么

作者: healer_kx   发布时间: 2011-06-14