В чем проблема с моей программой?
Ваша ошибка a[i+1][j+1]=a[i][j];
, так как ячейка сразу после i,j
не i+1,j+1
Предложение:
#include<stdio.h>
#define NROW 4
#define NCOL 3
int main()
{
int a[NROW][NCOL] = { 0};
int i,j,k,row,col;
puts("Enter the elements");
for(i = 0; i<(NROW - 1); ++i) {
for(j = 0; j<NCOL; ++j) {
if (scanf("%d", &a[i][j]) != 1) {
puts("invalid value");
return -1;
}
}
}
puts("Enter the number:");
if (scanf("%d", &k) != 1) {
puts("invalid value");
return -1;
}
printf("Enter row (1..%d) and column (1..%d):", NROW - 1, NCOL);
if ((scanf("%d %d", &row, &col) != 2) ||
(row < 1) || (row >= NROW) || (col < 1) || (col > NCOL)) {
puts("invalid value");
return -1;
}
row--;
col--;
/* i,j at the new last cell position */
i = NROW - 1;
j = 0;
do {
int previ, prevj; /* the cell before i,j */
if (j == 0) {
previ = i - 1;
prevj = NCOL - 1;
}
else {
previ = i;
prevj = j - 1;
}
a[i][j] = a[previ][prevj];
i = previ;
j = prevj;
} while ((i != row) || (j != col));
a[row][col] = k;
for(i = 0; i < NROW; ++i)
{
for(j = 0; j < NCOL; ++j)
printf("%d ",a[i][j]);
printf("\n");
}
}
Компиляция и выполнение:
/tmp % gcc -pedantic -Wextra i.c
/tmp % ./a.out
Enter the elements
1 2 3
4 5 6
6 7 8
Enter the number:
32
Enter row (1..3) and column (1..3):
2 2
1 2 3
4 32 5
6 6 7
8 0 0
/tmp % ./a.out
Enter the elements
1 2 3
4 5 6
6 7 8
Enter the number:
32
Enter row (1..3) and column (1..3):
1 2
1 32 2
3 4 5
6 6 7
8 0 0
Как вы можете видеть, я также проверяю достоверность входов и использую определения препроцессора NROW и NCOL для легкого изменения размеров массива