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

C语言如何接收多组个人数据并实现多个矩阵多行内容的打印

C代码问题分析及修正

存在的问题

  • scanf("%d %d", &N);格式符和参数不匹配,你只需要读取1个整数N,格式串写了两个%d,会导致读取逻辑异常。
  • 定义变长数组时,下标用了未初始化的变量i,此时i的值是随机的,数组的长度完全不符合预期,应该用读取到的N作为数组第一维的长度。
  • 数组类型定义错误:abiliity(拼写也多了一个i)不需要定义为二维数组,每组数据仅对应1个能力值,定义为长度为N的一维数组即可。
  • 输入参数不匹配:你把二维数组abiliity[i]取地址传入%d对应的参数位,类型不符合要求,会触发未定义行为。
  • 输出逻辑完全错误:不需要嵌套j循环逐字符打印,逐字符打印还会访问超出字符串实际长度的内存,甚至超出数组本身的边界(name数组单条最大长度仅10,city仅100,你循环到j=999必然越界),直接用%s输出完整字符串、%d输出能力值即可。

修正后可运行代码

#include <stdio.h>
#include <stdlib.h>

int main() {
  int N, i;
  // 正确读取N的值
  scanf("%d", &N);
  // 用N作为变长数组的长度
  char name[N][10];
  char city[N][100];
  int ability[N];

  for (i = 0; i < N; ++i) {
    scanf("%s %s %d", name[i], city[i], &ability[i]);
  }

  for (i = 0; i < N; i++) {
    // 直接打印完整字符串和能力值
    printf("%s %s %d\n", name[i], city[i], ability[i]);
  }

  return 0;
}

额外注意事项

  • 代码中假设输入的姓名长度不超过9字节、城市长度不超过99字节,如果实际输入长度超出限制会触发缓冲区溢出,可在%s前加长度限制(比如%9s、%99s)避免风险。
  • 如果编译器不支持C99及以上标准的变长数组,可改用动态内存分配的方式创建对应大小的数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:24:03