You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言新手求助:二维数组扫描与打印结果异常问题

帮你排查C语言二维数组输入输出的坑

兄弟,刚学C碰到数组/指针的问题太正常了!我帮你捋捋大概率出问题的地方——扫描和打印环节都有可能踩坑,咱们一个个说:

扫描环节的常见错误

  • 数组未初始化:如果你只是声明了二维数组但没给它赋初始值,那数组里全是内存里的随机垃圾值,哪怕你给部分坐标赋值了,未赋值的位置打印出来也是乱的。比如int arr[st_objects][st_objects];这种,最好初始化一下(C99及以后支持变长数组用{0}初始化)。
  • 坐标越界访问:你说st_objects是5的话,数组的下标范围是0~4,如果输入的坐标是5或者负数,那就是越界操作了——这会破坏其他内存区域的数据,不仅数组值乱,甚至可能直接崩溃。一定要加个判断,确保输入的行、列在合法范围内。
  • scanf格式/缓冲区问题:比如前面读st_objects的时候用了scanf("%d", &st_objects);,缓冲区里留了个换行符,后面读坐标的时候可能会被当成空输入;或者格式符用错了(比如把整数的%d写成%f),导致读入的值完全不对。
  • 指针误用(如果用了动态数组):要是你用int **arr来实现二维数组,却没给每一行分配内存(比如没循环用malloc),那就是野指针,访问的时候肯定出问题。

打印环节的常见错误

  • 循环范围错了:比如打印的时候循环从1到st_objects,而不是0到st_objects-1,这样就会访问数组外面的内存,打印出垃圾值。
  • 格式符不匹配:数组是int类型,你却用%s或者%f来打印,那输出肯定是乱码。
  • 行/列遍历顺序搞反:比如把外层循环的行和内层循环的列写反了,输出的数组行列就颠倒了,看起来像是完全错误。

给你个参考示例代码

你可以对照自己的代码看看哪里不一样:

#include <stdio.h>

int main() {
    int st_objects;
    printf("请输入数组的宽高:");
    scanf("%d", &st_objects);
    
    // 初始化数组为0,避免垃圾值干扰
    int arr[st_objects][st_objects] = {0};
    
    printf("请输入坐标和对应值(格式:行 列 值,输入-1 -1 0结束):\n");
    int row, col, val;
    while (scanf("%d %d %d", &row, &col, &val) == 3) {
        if (row == -1 && col == -1) break;
        // 检查坐标合法性
        if (row >= 0 && row < st_objects && col >= 0 && col < st_objects) {
            arr[row][col] = val;
        } else {
            printf("坐标超出范围啦!请输入0到%d之间的数\n", st_objects - 1);
        }
    }
    
    // 打印数组
    printf("\n输出的二维数组:\n");
    for (int i = 0; i < st_objects; i++) {
        for (int j = 0; j < st_objects; j++) {
            printf("%d\t", arr[i][j]);
        }
        printf("\n");
    }
    
    return 0;
}

你可以先检查自己的代码有没有上面说的这些问题,要是还是搞不定,可以把你的代码贴出来,我再帮你揪细节!

内容的提问来源于stack exchange,提问作者unf0rged

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:03:23