为什么我的程序在第一个for循环后结束?

时间:2017-11-03 07:35:44

标签: c for-loop printf scanf magic-square

我正在编写一个计算魔方的程序,但我无法让输入正常工作。我非常确定我正在使用值填充数组,但它会在前两个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 个答案:

答案 0 :(得分:2)

首次循环后,您需要将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]);
                        }
               }

保持循环初始化计数器变量的习惯,否则会很危险。

答案 1 :(得分:0)

您需要在for循环的第一部分中写入初始值。而不是

for(row; row<dimension; ++row) 

for(col; col<dimension; ++col)

使用

for(row = 0; row < dimension; ++row)

for(col = 0; col < dimension; ++col)

同样非常重要的是,在第二个循环中使用变量之前,需要重新初始化变量rowcol。现在,当你到达第二个循环(打印循环)时,rowcol已经等于第一个循环(读取一个)的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);

和您的变量rowNumberelementNumber,因为您读取每个框的元素,而不是行。

答案 2 :(得分:0)

你没有正确地初始化你的循环变量,当前几个循环完成时,它们的colrow)值已经等于dimension,这使第二对的循环条件无效循环