2012-03-27 7 views
4

は、私は学校のための掃海艇のプログラムを行っていますが、私は私のコードでこのエラーを得続けます。私はサイズを割り当てていません - 私はそれを0に設定しています。別の問題は、charによってcharで私の入力をどのように読み取ることができるのですか?「定数サイズ0の配列を割り当てることができません」というメッセージが表示されるのはなぜですか?</p> <blockquote> <p>はなぜこれが起こっている私にはわからない一定のサイズ0</p> </blockquote> <p>の配列を割り当てることができません

以下に示すように、私は入力と出力を使用しています。私はあなたの入力と私の出力をコメンテッドので、皆さんは私がこのプログラムのために何を使用しているかを見ることができます。 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のようにタグの再設定そうだ。 –

+3

@MikeKwan:みんな、C++コンパイラ(Visual StudioではCコードとして明示的にコンパイルせずに)を使用しているため、Cとして再タグ付けしません。問題はゼロサイズの配列ではなく、2番目のエラーメッセージです。 –

+0

Edが正しいです。このようなコードをVisual Studioでコンパイルしようとすると、まず定数式エラーとゼロサイズエラーが表示されます。 – ShiggityShiggityShwa

答えて

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

これは違法です。これはより簡単なバージョンです。

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

しかし...あなたが実際にここで気に

int x[10]; // ok! 

エラーは、この1、エラーではなく「一定のサイズ0の配列を割り当てることができません」です。

エラーC2057:定数式が期待

あなたはC++での自動記憶域期間で、未知のサイズの配列を割り当てることができません。可変サイズの配列が必要な場合は、動的に配列を割り当てる必要があります(または、より良い方法では、vectorを使用するだけです)。そこにこれを許可するためのgccの拡張があるが、ないVSであること

ノート(と、それは標準C++ではありません。これは、C++ 11のために提出され、最終的に減少しました。)

+0

ああ今、私はそれを理解しています。動的に作成します。そして何が起こるのか見てみましょう。私は入力の問題も見たいと思っています。ありがとうございました – Giuseppe

+0

これはCの新しいバージョンでは合法です。 –

+0

@muntoo:そうですが、彼はC99をサポートしていないVSを使用していますが、Cコードのように見えますが、彼はC++としてコンパイルしています。どちらにせよ、これは合法ではありません。 –