2012-03-27 4 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, так как код, кажется, будьте так. –

+3

@MikeKwan: ​​Ребята, не возвращайте C, потому что он использует компилятор C++ (Visual Studio без явной компиляции как код C), и проблема не в массиве нулевого размера, это просто второе сообщение об ошибке, которое вы видите. –

+0

Ред правильно, когда вы пытаетесь скомпилировать такой код в Visual Studio, вы сначала увидите ошибку константного выражения, а затем ошибку нулевого размера. – ShiggityShiggityShwa

ответ

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

Это незаконно. Как и эта более простая версия;

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

Однако ...

int x[10]; // ok! 

Ошибка вы на самом деле волнует здесь это один, а не «не может выделить массив постоянного размера 0» ошибки.

ошибка C2057: ожидается постоянное выражение

Вы не можете выделить массив неизвестного размера с автоматической продолжительности хранения в C++. Если вам нужен массив с переменным размером, вам необходимо динамически распределить его (или, что еще лучше, просто используйте vector).

Обратите внимание, что существует НКА расширение, чтобы позволить этому, но не в VS (и это не стандарт C++. Он был представлен на C++ 11, но в конечном итоге отказался.)

+0

oh теперь я понимаю это, ну я постараюсь создайте его динамически. И посмотрим, что произойдет, потому что я тоже хочу увидеть проблему ввода. Спасибо за ваше время – Giuseppe

+0

Это законно в новых версиях C. –

+0

@muntoo: Правильно, но он использует VS, который не поддерживает C99, и хотя этот * выглядит * как код C для нас, я почти гарантирую вам что он компилируется как C++.Так или иначе, это не законно. –

Смежные вопросы