Почему моя программа заканчивается после первого цикла for?
Я пишу программу, которая будет вычислять магический квадрат, но я не могу заставить ввод работать правильно. Я почти уверен, что заполняю массив значениями, но он заканчивается сразу после первых двух циклов for. Предполагается, что вторые два распечатывают массив, но программа заканчивается сразу после ввода данных. Я поставил петлю в неправильном месте?
#include <stdio.h>
#define SIZE 15
int main(){
declareArray();
return 0;
}
int declareArray(){
int rowNumber = 0;
int dimension=0;
int arr[SIZE][SIZE] = {0};
int col = 0;
int row = 0;
printf("Please enter the dimension of the square: ");
scanf("%d", &dimension);
arr[dimension][dimension];
for(row; row<dimension; ++row)
for(col; col<dimension; ++col){
printf("Please enter the data for row %d: ", ++rowNumber$
scanf("%d", &arr[row][col]);
}
for(row; row<dimension; ++row){
for(col; col<dimension; ++col){
printf("%d", arr[row][col]);
}
}
return 0;
}
мой вклад:
3
123
456
789
мой ожидаемый результат
123
456
789
что я получаю это:
123
0
0
456
0
0
789
0
0
3 ответа
Вам нужно записать начальное значение в первой части for
петля. Так что вместо
for(row; row<dimension; ++row)
а также
for(col; col<dimension; ++col)
использование
for(row = 0; row < dimension; ++row)
а также
for(col = 0; col < dimension; ++col)
Также очень важно, вам нужно повторно инициализировать переменные row
а также col
прежде чем использовать их во втором цикле. Прямо сейчас, когда вы достигнете второй петли (печатной), row
а также col
будет уже равен dimension
из первого цикла (чтение один), так что вы никогда не войдете во второй цикл.
for(row = 0; row<dimension; ++row)
{
for(col = 0; col<dimension; ++col)
{
printf("%d", arr[row][col]);
}
}
В конце ваша программа должна быть такой:
#include <stdio.h>
#define SIZE 15
int main(){
declareArray();
return 0;
}
int declareArray(){
int rowNumber = 0;
int dimension=0;
int arr[SIZE][SIZE] = {0};
int col = 0;
int row = 0;
printf("Please enter the dimension of the square: ");
scanf("%d", &dimension);
arr[dimension][dimension];
for(row=0; row < dimension; ++row)
for(col=0; col < dimension; ++col){
printf("Please enter the data for row %d: ", ++rowNumber);
scanf("%d", &arr[row][col]);
}
for(row=0; row < dimension; ++row){
for(col=0; col < dimension; ++col){
printf("%d", arr[row][col]);
}
}
return 0;
}
ПРИМЕЧАНИЕ: я думаю, что вы должны изменить утверждение
printf("Please enter the data for row %d: ", ++rowNumber);
к:
printf("Please enter the data for element %d: ", ++rowNumber);
и ваша переменная rowNumber
в elementNumber
, так как вы читаете элементы для каждого блока, а не строки.
После первого цикла вам нужно сбросить row и col в 0:
for(row = 0; row<dimension; ++row)
for(col = 0; col<dimension; ++col)
{
printf("Please enter the data for row %d: ", ++rowNumber$
scanf("%d", &arr[row][col]);
}
for(row = 0; row<dimension; ++row)
{
for(col = 0; col<dimension; ++col)
{
printf("%d", arr[row][col]);
}
}
Сохраняйте привычку инициализировать переменную-счетчик в цикле, иначе это будет опасно.
Вы не правильно инициализировали переменную цикла, когда первая пара циклов выполнена (col
а также row
) значения уже равны dimension
который делает недействительным условие цикла для второй пары циклов