鱼C论坛

 找回密码
 立即注册
查看: 986|回复: 4

[已解决]c++报错

[复制链接]
发表于 2020-7-26 20:47:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码:
  1. //

  2. #include<stdio.h>

  3. int main()
  4. {
  5.         int citysum,roadsum;
  6.         int a,b,c;
  7.         scanf("%d %d",&citysum,&roadsum);
  8.         int map[citysum][citysum]; //这行出错
  9.         for(int i=0;i<=citysum;i++)
  10.                 for(int j=0;j<=citysum;j++)
  11.                         map[i][j]=0;

  12.        
  13.         for(int i=0;i<roadsum;i++){
  14.                 scanf("%d %d %d",&a,&b,&c);
  15.                 map[a][b] = c;
  16.         }
  17.         for(int i=0;i<=citysum;i++){
  18.                 for(int j=0;j<=citysum;j++)
  19.                         printf("%d\t",map[i][j]);
  20.                 printf("\n");
  21.         }
  22.         return 0;
  23. }
复制代码


报错:
[b]
  1. 错误        2        error C2057: 应输入常量表达式        11行
  2. 错误        3        error C2466: 不能分配常量大小为 0 的数组        11行
  3. 错误        4        error C2057: 应输入常量表达式        11行
  4. 错误        5        error C2466: 不能分配常量大小为 0 的数组        11行       
  5. 错误        6        error C2087: “map”: 缺少下标        11行
  6. 错误        7        error C2133: “map”: 未知的大小        11行
复制代码
[b]

最佳答案
2020-7-26 21:05:35
本帖最后由 永恒的蓝色梦想 于 2020-7-26 21:20 编辑

微软系的都不支持变长数组,而且你的程序可能下标越界。改为:
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<malloc.h>



  4. int main()
  5. {
  6.     int citysum, roadsum;
  7.     int a, b, c;
  8.     scanf("%d %d", &citysum, &roadsum);
  9.     int** map = (int**)malloc(citysum * citysum * sizeof(int));
  10.     for (int i = 0; i < citysum; i++)
  11.         for (int j = 0; j < citysum; j++)
  12.             map[i][j] = 0;


  13.     for (int i = 0; i < roadsum; i++) {
  14.         scanf("%d %d %d", &a, &b, &c);
  15.         map[a][b] = c;
  16.     }
  17.     for (int i = 0; i < citysum; i++) {
  18.         for (int j = 0; j < citysum; j++)
  19.             printf("%d\t", map[i][j]);
  20.         printf("\n");
  21.     }
  22.     return 0;
  23. }
复制代码
就可以了。

优化版:
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<malloc.h>
  4. #include<string.h>



  5. int main()
  6. {
  7.     int citysum, roadsum;
  8.     int a, b, c;
  9.     scanf("%d%d", &citysum, &roadsum);
  10.     int** map = (int**)malloc(citysum * citysum * sizeof(int));


  11.     memset(map, 0, citysum * citysum * sizeof(int));


  12.     for (int i = 0; i < roadsum; i++) {
  13.         scanf("%d%d%d", &a, &b, &c);
  14.         map[a][b] = c;
  15.     }


  16.     for (int i = 0; i < citysum; i++) {
  17.         for (int j = 0; j < citysum; j++) {
  18.             printf("%d\t", map[i][j]);
  19.         }
  20.         putchar('\n');
  21.     }


  22.     return 0;
  23. }
复制代码


还可以使用 calloc:
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<malloc.h>
  4. #include<string.h>



  5. int main()
  6. {
  7.     int citysum, roadsum;
  8.     int a, b, c;
  9.     scanf("%d%d", &citysum, &roadsum);
  10.     int** map = (int**)calloc(citysum * citysum, sizeof(int));


  11.     for (int i = 0; i < roadsum; i++) {
  12.         scanf("%d%d%d", &a, &b, &c);
  13.         map[a][b] = c;
  14.     }


  15.     for (int i = 0; i < citysum; i++) {
  16.         for (int j = 0; j < citysum; j++) {
  17.             printf("%d\t", map[i][j]);
  18.         }
  19.         putchar('\n');
  20.     }


  21.     return 0;
  22. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-7-26 20:50:23 | 显示全部楼层
@Twilight6 给你一个挣最佳的机会
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-26 21:05:20 | 显示全部楼层
xiaosi4081 发表于 2020-7-26 20:50
@Twilight6 给你一个挣最佳的机会



  我还没学 C++

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-7-26 21:05:35 | 显示全部楼层    本楼为最佳答案   
本帖最后由 永恒的蓝色梦想 于 2020-7-26 21:20 编辑

微软系的都不支持变长数组,而且你的程序可能下标越界。改为:
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<malloc.h>



  4. int main()
  5. {
  6.     int citysum, roadsum;
  7.     int a, b, c;
  8.     scanf("%d %d", &citysum, &roadsum);
  9.     int** map = (int**)malloc(citysum * citysum * sizeof(int));
  10.     for (int i = 0; i < citysum; i++)
  11.         for (int j = 0; j < citysum; j++)
  12.             map[i][j] = 0;


  13.     for (int i = 0; i < roadsum; i++) {
  14.         scanf("%d %d %d", &a, &b, &c);
  15.         map[a][b] = c;
  16.     }
  17.     for (int i = 0; i < citysum; i++) {
  18.         for (int j = 0; j < citysum; j++)
  19.             printf("%d\t", map[i][j]);
  20.         printf("\n");
  21.     }
  22.     return 0;
  23. }
复制代码
就可以了。

优化版:
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<malloc.h>
  4. #include<string.h>



  5. int main()
  6. {
  7.     int citysum, roadsum;
  8.     int a, b, c;
  9.     scanf("%d%d", &citysum, &roadsum);
  10.     int** map = (int**)malloc(citysum * citysum * sizeof(int));


  11.     memset(map, 0, citysum * citysum * sizeof(int));


  12.     for (int i = 0; i < roadsum; i++) {
  13.         scanf("%d%d%d", &a, &b, &c);
  14.         map[a][b] = c;
  15.     }


  16.     for (int i = 0; i < citysum; i++) {
  17.         for (int j = 0; j < citysum; j++) {
  18.             printf("%d\t", map[i][j]);
  19.         }
  20.         putchar('\n');
  21.     }


  22.     return 0;
  23. }
复制代码


还可以使用 calloc:
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<malloc.h>
  4. #include<string.h>



  5. int main()
  6. {
  7.     int citysum, roadsum;
  8.     int a, b, c;
  9.     scanf("%d%d", &citysum, &roadsum);
  10.     int** map = (int**)calloc(citysum * citysum, sizeof(int));


  11.     for (int i = 0; i < roadsum; i++) {
  12.         scanf("%d%d%d", &a, &b, &c);
  13.         map[a][b] = c;
  14.     }


  15.     for (int i = 0; i < citysum; i++) {
  16.         for (int j = 0; j < citysum; j++) {
  17.             printf("%d\t", map[i][j]);
  18.         }
  19.         putchar('\n');
  20.     }


  21.     return 0;
  22. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-26 21:05:55 | 显示全部楼层
因为你用的编译器不允许定义可变数组,在编译的时候citysum是未知的,所以编译器认为数组map是可变长度,无法分配空间,这就出错了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-1 07:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表