2012-03-27 385 views
4

我做學校掃雷艇程序,但我一直對我的代碼得到這個錯誤爲什麼我得到「不能分配一個常量大小爲0的數組」?

不能分配常量大小0

數組我不知道爲什麼發生這種情況;我沒有分配大小 - 我將其設置爲0.另一個問題是,如何通過char讀取我的輸入char,以便將其保存在我的數組中?

正如您在下面看到的,我正在使用輸入和輸出。我編寫了我的輸入和輸出結果,這樣你們就可以看到這個程序使用什麼了。我想通過char來讀取char,這樣我就可以將所有的地圖保存在數組中。

我正在使用MSVC++ 2010。

freopen("input.txt","rt",stdin); 
//4 4 
//*... 
//.... 
//.*.. 
//.... 
//3 5 
//**... 
//..... 
//.*... 
//0 0 


freopen("output.txt","wt",stdout); 

/*Field #1: 
*100 
2210 
1*10 
1110 

Field #2: 
**100 
33200 
1*100*/ 
int n=-1; 
int m=-1; 
int cont =0; 
while(n!=0 && m!=0) 
{ 
    scanf("%d %d",&n,&m); 
    int VMatriz[n][m]={0}; 
    int Mapa[n][m]={0}; 


    if (n==0 && m==0) 
     break; 
    cont++; 
    printf("Field #%d",cont); 


    for (int i=0;i<n;i++) 
    { printf("/n"); 
     for (int j=0;j<m;j++) 
     { 

      scanf("%d ",&Mapa[i][j]); 

      if (Mapa[i][j]=='*') 
       { 
        if (j-1>=0) 
         VMatriz[i][j-1]++; 
        if (j+1<m) 
         VMatriz[i][j+1]++; 
        if (i-1>=0) 
         VMatriz[i-1][j]++; 
        if (i+1<m) 
         VMatriz[i+1][j]++; 

        if (j-1>=0 && i-1>0) 
         VMatriz[i-1][j-1]++; 
        if (j-1>=0 && i+1<m) 
         VMatriz[i+1][j-1]++; 
        if (j+1<m && i-1>0) 
         VMatriz[i-1][j+1]++; 
        if (j+1<m && i+1<m) 
         VMatriz[i+1][j+1]++; 

        VMatriz[i][j]='*'; 

       printf("%d",VMatriz[i][j]); 


       } 

     } 

    } 
    printf("/n"); 


} 
return 0; 

}

+0

重新標記爲C,因爲代碼似乎是這樣。 – 2012-03-27 00:32:26

+3

@MikeKwan:夥計們,因爲他使用的是C++編譯器(Visual Studio,沒有明確編譯爲C代碼),所以不能保留爲C,並且問題不是零大小的數組,這只是您看到的第二條錯誤消息。 – 2012-03-27 00:36:09

+0

Ed是正確的,當您嘗試在Visual Studio中編譯這樣的代碼時,您將首先看到常量表達式錯誤,然後看到零大小錯誤。 – ShiggityShiggityShwa 2012-03-27 00:38:17

回答

8
int VMatriz[n][m]={0}; 

這是非法的。這是更簡單的版本;

int n = 10; 
int x[n]; // C2057 

但是......

int x[10]; // ok! 

你真正關心這裏的錯誤是這樣的,不是「不能分配固定大小的數組0」的錯誤。

錯誤C2057:預期常量表達式

不能在下用自動存儲持續時間分配未知大小的數組++。如果你想要一個可變大小的數組,那麼你需要動態分配它(或者,更好,只需使用vector)。

注意,有一個gcc的擴展,允許這樣做,但不是在VS(它不是標準的C++,它提交了C++ 11,但最終拒絕。)

+0

哦,現在我明白了,以及我會盡力動態創建它。看看會發生什麼,因爲我也想看到輸入問題。感謝您的時間 – Giuseppe 2012-03-27 00:37:38

+0

這是合法的新版本C. – 2012-03-27 00:42:07

+0

@muntoo:是的,但他使用VS不支持C99,儘管*看起來像C代碼給我們,我幾乎可以保證你他正在編譯爲C++。無論如何,這是不合法的。 – 2012-03-27 00:43:01

相關問題