我怎么能实现这一块代码?

时间:2017-01-23 13:13:20

标签: c++ arrays

所以我的讲师给了我这一块代码来实现,基本上这里的总体目标是在将PPM图像写入文件后在PPM图像中制作棋盘图案。将所有内容写入文件对我来说是非常自我解释的,问题是我得到的只是我的数组中的零。

我的导师给了我一块。

        int col = ((w & 0x08) == 0) ^ ((h & 0x08) == 0);
        raster[i][j].r = static_cast<float>(col);
        raster[i][j].g = static_cast<float>(col & 0x00);
        raster[i][j].b = static_cast<float>(col & 0x11);

这就是我所拥有的。

#include <iostream>

using namespace std;

struct RGB{
    float r;
    float g;
    float b;
};

int main(){
//Declare Variables
    int h;
    int w;

//User Feedback
    cout << "Please input height then width" << endl;
    cin >> h >> w;

    RGB raster[h][w];

//Assignment loop i = h and j = w
    for(int i = 0; i < h; i++){
        for(int j = 0; j < w; j++){
            int col = ((w & 0x08) == 0) ^ ((h & 0x08) == 0);
            raster[i][j].r = static_cast<float>(col);
            raster[i][j].g = static_cast<float>(col & 0x00);
            raster[i][j].b = static_cast<float>(col & 0x11);

            cout << raster[i][j].b << endl;
        }
    }

    return 0;
}

如果有人能解释我做错了什么,我会非常感激。到目前为止,我一直坚持这个问题并尝试了许多不同的事情。

我找到了这个问题。我的迭代器提供了非常高的价值,而且它非常随机。任何人都知道为什么?

2 个答案:

答案 0 :(得分:2)

您永远不会更新col。

的值
  

int col = ((w & 0x08) == 0) ^ ((h & 0x08) == 0);

W和h是常数,因此col将是常数。

==的结果只能是0或1.因为(1或0)xor(1或0)只能给(1或0)col必须相等(1或0)。

设置时

raster[i][j].b = static_cast<float>(col & 0x11);

&不执行任何操作,因为您的col值只能是1或0。

你确定col变量设置正确吗?

答案 1 :(得分:0)

您可以通过向其添加print语句来调试代码。例如:

    for(int j = 0; j < w; j++){
        int col = ((w & 0x08) == 0) ^ ((h & 0x08) == 0);
        std::cout << "First part: " << ((w & 0x08) == 0) << '\n';
        std::cout << "Second part: " << ((h & 0x08) == 0) << '\n';
        std::cout << "col = " << col << '\n';
        ...
    }

您的具体案例在col计算中出错 - 它应该使用例如j代替w

BTW教师给出的代码中的其他内容看起来很可疑。你可能想问他解释代码的作用和原因。或者(更好)自己编写代码 - 它足够小,可以完全重写。