2017-01-23 59 views
0

所以我的老師給了我這塊代碼來實現,基本上這裏的總體目標是在將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

你有調試嗎?你學到了什麼? – Carcigenicate

+0

不幸的是我知道我的IDE非常糟糕,它在調試時崩潰,我不得不重新啓動。 – Tykota

+1

您是否嘗試用調試器逐步執行代碼?另外,_standard_ C++不支持VLAs('RGB raster [h] [w];')。 –

回答

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

在你的代碼中,由老師給出的其他內容看起來很可疑。你可能想問他解釋代碼的作用和原因。或者(更好)自己編寫代碼 - 它足夠小,可以完全重寫。

+0

謝謝。他也是一位向我們投擲奇怪東西的教練。他像糖果一樣交出零。 – Tykota

+0

也做到了!我的價值現在有所不同!非常感謝。我真的只是忽略了那部分。 – Tykota

+0

我的分數值不再變化,因爲我的程序現在顯示爲一個大的負數,我不確定爲什麼。我一直在調試。 – Tykota

2

你永遠不會更新列的值。

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

W和H是恆定的,因此COL將是恆定的。因爲(1或0)xor(1或0)只能給出(1或0),所以col必須相等(1或0)。

當設置

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

&什麼也不做,因爲你的山坳值只能是1或0

確定山坳變量被設置正確?

+0

它應該只有0或1.最終結果是PPM文件中的檢查板模式 – Tykota

+0

我必須將它轉換爲PPM中使用的0 - 225 – Tykota

+1

那麼爲什麼要和它呢? AND不做任何事情。 – user3853544

相關問題