Почему моя программа заканчивается после первого цикла 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 который делает недействительным условие цикла для второй пары циклов

Другие вопросы по тегам