Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > непонятная ошибка


Автор: baduk 16.12.2013, 20:12
программа считывает матрицу и выводит её элементы змейкой против часовой стрелки, когда вводишь размер 2х2, 3х3, все работает, но если 4х4 и более, выдает шибку(скрин ниже), немогу ничего с этим сделать, а следовательно и отладить программу, т.к я сомневаюсь, что она работает на 4х4. подскажите пожалуйсто, что с этим делать  и желательно подскажите как поправить программу чтоб она работала до размеров 7х7.
Код

#include <stdio.h>
enum {maxn=100}
main(){
int k=0;
int p=0;
int f=0;
int j, i;
int m [maxn] [maxn];
int n;
printf("Vvedte razmer matrycy\n");
scanf("%d", &n);
printf("Vvedite elementy matrycy\n");
for(i=0; i<n; i++)
  for(j=0;j<n; j++)
scanf("%d", &m[i][j]);
printf("matryca:\n");
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
  printf("%d ", m[i][j]); 
printf("\n");
}
printf("ryd:");
while(n>=2) {
while(n!=k+f){ k++;
printf("%d ", m[p][n-k]);
}
k=f;
while(n-1!=k){k++;
printf("%d ", m[k][p]); 
}
k=f;
while(k!=n-1){k++;
printf("%d ", m[n-1][k]);
}
k=1;
while(k!=n-1){ k++;
printf("%d ", m[n-k][n-1]); 
}
n--; k=0; f++;
p++; }
printf("\n");
}


Автор: akizelokro 16.12.2013, 23:21
Код

while(n!=k+f)

Для начала расставь ещё скобки в этом выражении сравнения и остальных
Для примера
Код

while( n != (k+f) )

Автор: feodorv 17.12.2013, 05:42
Чуть более порядка в коде:
Код

  while( n >= 2 ) 
  {
     while( n != k+f )
     { 
       k++;
       printf( "%d ", m[p][n-k]);
     }

     k = f;
     while( n-1 != k )
     {
       k++;
       printf( "%d ", m[k][p]); 
     }

     k = f;
     while( k != n-1 )
     {
       k++;
       printf( "%d ", m[n-1][k]);
     }

     k = 1;
     while( k != n-1 )
     { 
       k++;
       printf( "%d ", m[n-k][n-1]); 
     }

     n--; 
     k = 0; 
     f++;
     p++; 
  }


Я не понимаю, зачем изменять n, когда f и p успешно меняются (кстати, зачем 2 переменные?), но дело Ваше.

Я же со своей стороны посоветовал бы заменить != на > или <, так как вполне может случиться так, что при очередном шаге цикла одновременное изменение n и f даст такой результат, что это != не будет выполнено (что, судя по всему, и наблюдается для чётных значений n), а, следовательно, произойдёт выход за пределы массива, и случится тот самый core dumped.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)