所以我的讲师给了我这一块代码来实现,基本上这里的总体目标是在将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;
}
如果有人能解释我做错了什么,我会非常感激。到目前为止,我一直坚持这个问题并尝试了许多不同的事情。
我找到了这个问题。我的迭代器提供了非常高的价值,而且它非常随机。任何人都知道为什么?
答案 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教师给出的代码中的其他内容看起来很可疑。你可能想问他解释代码的作用和原因。或者(更好)自己编写代码 - 它足够小,可以完全重写。