c - 二维数组输出值不正确

标签 c arrays matrix input output

我有这段代码,但不知道为什么我的输出不正确。我习惯了 C++ 而不是 C。

运行使用:./sudoku.o < inputfile

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");
}

这是我的意见

827154396 
965327148
341689752
593468271
472513689
618972435
786235914
154796823
239841567 

这是我得到的输出

-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;
}

对于你的数据文件,输出是(惊喜,惊喜):

82715439
69653271
48341689
75259346
82714725
13689618
97243578
62359141

“啊”,你说,“我想要每行 9 个数字”。但是您的代码没有这样说;您将 rowcol 设置为 8,因此您只读取矩阵每行 8 个数字,并且只有 8 行。日期第一行的第九个数字成为矩阵第二行的第一个数字,依此类推。

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

827154396
965327148
341689752
593468271
472513689
618972435
786235914
154796823
239841567

如果你想要逐行输入(不一定是个坏主意),你需要使用 fgets() (或者可能是 POSIX getline() ) 读取行,然后 sscanf()读取数字 — 参见 How to use sscanf() in loops?

关于c - 二维数组输出值不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43383596/

相关文章:

javascript - 将 View Web 表单 View 引擎格式中的字符串数组转换为 javaScript 对象

javascript - 循环迭代避免相同的索引javascript

python - 从对列表中制作 Numpy 对称矩阵

r - 在R中,当使用命名行时,稀疏矩阵列可以添加(连接)到另一个稀疏矩阵吗?

c - 杀死 mingw 和 wine 中的 fgets 线程

c++ - ARB_sync 和适当的测试

c - 未解析的外部(旧编译器)

objective-c - 登录窗口通知或获取有关用户注销的通知

objective-c - 如何将 Core Data 数据放入数组数组中?与 Dave DeLong 的 CHCSVWriter 一起使用

optimization - 矩阵/向量运算的 GCC 优化标志