2011-07-09 25 views
0

當下面的程序是FEAD以下輸入(可以從cin讀):爲什麼它會在我們不在數組中的cout中出現?

1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 

輸出是令人驚訝:

1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 

#include<iostream> 
using namespace std; 
int main() 
{ 
    int arey[3][3]; 
    int i,j; 
    for(j=0;j<=3;j++) 
    { 
     for(i=0;i<=3;i++) 
     { 
      cin>>arey[j][i]; 
     } 
    } 
    arey[0][0]=1; 
    arey[3][3]=1; 
    i=0,j=0; 
    for(j=0;j<=3;j++) 
    { 
     for(i=0;i<=3;i++) 
     { 
      cout<<arey[j][i]; 
     } 
    } 
    return 0; 
} 

有人能解釋我應該改變,以獲得輸出相同輸入?

+1

不清楚你在問什麼/你的問題是什麼。 – Mat

+0

@Mat:我認爲Q是爲什麼程序不輸出所需的輸出,@ Melik4指出問題前提顯然確實有幫助。 –

回答

1

陣列,可以使用基於0的指數,因此指數的爲您

int arey[3][3];有效範圍

0 <= i < 30 <= j < 3

所以,你需要改變你for循環的條件要嚴格<而不是<=

+0

親愛的bshields,當我們將代碼更改爲此時,它將成爲一個極端循環。 – Melik4

+0

我不知道你的意思是什麼,但在查看你的輸入數據後,好像你的循環索引是正確的,你的數組聲明是錯誤的。既然你有16個輸入值,你需要將你的數組聲明爲4x4,然後你可以單獨留下循環索引(儘管寫這個的更爲常見的方式是'i <4'而不是'i <= 3') – bshields

+0

ohhhhhhhhhhh!抱歉!我有一個錯誤...謝謝... – Melik4

6

矩陣是3x3還是4x4?

您創建的3x3但循環運行4個元素,你也更新[3] [3]

基本上你的索引溢出和您覆蓋矩陣中的不同的小區。

更新:cheecked你的輸入,使用方法:int arey[4][4];

+0

是的。我的意思是3x3 ...我的意思是16個數字。 – Melik4

+0

3 * 3 == 9個數字。如果你想要16,你需要4 * 4。 – Mat

+0

我們只需要16個數字....所以,如果我們將其更改爲[4] * [4],我們必須輸入25個數字。 – Melik4

1

我真的不認爲我明白你的問題,但這是錯誤的:

int arey[3][3]; 
... 
for(j=0;j<=3;j++) // <= invalid 
... 
array[3][3]=1; // out of bounds 

arey3*3陣列。你不能訪問arey[3][?],這是超出界限。唯一有效的指數是0..2

一旦你寫過數組的邊界,你的程序行爲就變得沒有定義。

相關問題