C 二维数组输出值不正确

C 二维数组输出值不正确,c,arrays,matrix,input,output,C,Arrays,Matrix,Input,Output,我有这段代码,不知道为什么我的输出不正确。我习惯了C++而不是C.< 使用:./sudoku.o

我有这段代码,不知道为什么我的输出不正确。我习惯了C++而不是C.< 使用:./sudoku.o
int row = 8;
int col = 8;
int puzzle[row][col];

for (int r = 0; r < row; r++){
    for (int c = 0; c < col; c++){                                                      
      scanf("%d", &puzzle[r][c]);
    }
}
for (int r = 0; r < row; r++){
    for (int c = 0; c < col; c++){
        printf("%d", puzzle[r][c]);
    }
    printf("\n");
}
这是我得到的输出

-132765-84896035232594-208491627232765-208491623232765
00-84896120832594-84897084832594-85115713632594
10-848970848325941000
10-8489612083259400-208491648032765
1700966438000-84896035232594-208491641632765
-20846176001-208491643232765-163754450041951850
-1000-85506816832594-84897220032594
0000-20849160083276500

如注释中所述,您应该检查scanf在此上下文中是否成功,返回1,并且您需要确保它只读取带有%1d的单个数字。像这样:

#include <stdio.h>

int main(void)
{
    int row = 8;
    int col = 8;
    int puzzle[row][col];

    for (int r = 0; r < row; r++)
    {
        for (int c = 0; c < col; c++)
        {
            if (scanf("%1d", &puzzle[r][c]) != 1)
            {
                fprintf(stderr, "Failed to read puzzle[%d][%d]\n", r, c);
                return 1;
            }
        }
    }
    for (int r = 0; r < row; r++)
    {
        for (int c = 0; c < col; c++)
        {
            printf("%d", puzzle[r][c]);
        }
        printf("\n");
    }

    return 0;
}
啊,你说,我想要每行9个号码。但是你的代码没有这么说;将row和col设置为8,所以矩阵的每行只能读取8个数字,并且只能读取8行。日期第一行的第九个数字变成矩阵第二行的第一个数字,以此类推

将限制更改为9以获得您真正想要的结果:

827154396
965327148
341689752
593468271
472513689
618972435
786235914
154796823
239841567
如果您希望逐行输入不一定是一个坏主意,那么您需要使用POSIX或POSIX 读台词,然后
要读取数字-请参见注释中所述的,您应该检查scanf在此上下文中是否成功,返回1,并且您需要确保它只读取带有%1d的单个数字。像这样:

#include <stdio.h>

int main(void)
{
    int row = 8;
    int col = 8;
    int puzzle[row][col];

    for (int r = 0; r < row; r++)
    {
        for (int c = 0; c < col; c++)
        {
            if (scanf("%1d", &puzzle[r][c]) != 1)
            {
                fprintf(stderr, "Failed to read puzzle[%d][%d]\n", r, c);
                return 1;
            }
        }
    }
    for (int r = 0; r < row; r++)
    {
        for (int c = 0; c < col; c++)
        {
            printf("%d", puzzle[r][c]);
        }
        printf("\n");
    }

    return 0;
}
啊,你说,我想要每行9个号码。但是你的代码没有这么说;将row和col设置为8,所以矩阵的每行只能读取8个数字,并且只能读取8行。日期第一行的第九个数字变成矩阵第二行的第一个数字,以此类推

将限制更改为9以获得您真正想要的结果:

827154396
965327148
341689752
593468271
472513689
618972435
786235914
154796823
239841567
如果您希望逐行输入不一定是一个坏主意,那么您需要使用POSIX或POSIX 读台词,然后
要读取数字-请参见

您尚未检查scanf的返回值。你应该。如果扫描%d,则使用&puzzle[r][c]!=1{…报告错误…}。我该怎么做?然而,您真正的问题是您想读取1位数字,但您的代码会读取9位数字,直到输入用尽为止。您需要使用%1d将输入限制为个位数。如果您测试了scanf的结果,您会发现问题,因为在输入循环完成之前很久,它就会显示EOF。是的,请确保使用您的数据类型,然后写入%d或其他内容。发布的代码无法生成所述输出。你贴对了吗?你没有检查scanf的返回值。你应该。如果扫描%d,则使用&puzzle[r][c]!=1{…报告错误…}。我该怎么做?然而,您真正的问题是您想读取1位数字,但您的代码会读取9位数字,直到输入用尽为止。您需要使用%1d将输入限制为个位数。如果您测试了scanf的结果,您会发现问题,因为在输入循环完成之前很久,它就会显示EOF。是的,请确保使用您的数据类型,然后写入%d或其他内容。发布的代码无法生成所述输出。你贴对了吗?