xiaosi4081 发表于 2020-7-26 20:47:46

c++报错

代码:
//

#include<stdio.h>

int main()
{
        int citysum,roadsum;
        int a,b,c;
        scanf("%d %d",&citysum,&roadsum);
        int map; //这行出错
        for(int i=0;i<=citysum;i++)
                for(int j=0;j<=citysum;j++)
                        map=0;

       
        for(int i=0;i<roadsum;i++){
                scanf("%d %d %d",&a,&b,&c);
                map = c;
        }
        for(int i=0;i<=citysum;i++){
                for(int j=0;j<=citysum;j++)
                        printf("%d\t",map);
                printf("\n");
        }
        return 0;
}


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

xiaosi4081 发表于 2020-7-26 20:50:23

@Twilight6 给你一个挣最佳的机会{:10_256:}

Twilight6 发表于 2020-7-26 21:05:20

xiaosi4081 发表于 2020-7-26 20:50
@Twilight6 给你一个挣最佳的机会



{:10_272:}我还没学 C++

永恒的蓝色梦想 发表于 2020-7-26 21:05:35

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

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



int main()
{
    int citysum, roadsum;
    int a, b, c;
    scanf("%d %d", &citysum, &roadsum);
    int** map = (int**)malloc(citysum * citysum * sizeof(int));
    for (int i = 0; i < citysum; i++)
      for (int j = 0; j < citysum; j++)
            map = 0;


    for (int i = 0; i < roadsum; i++) {
      scanf("%d %d %d", &a, &b, &c);
      map = c;
    }
    for (int i = 0; i < citysum; i++) {
      for (int j = 0; j < citysum; j++)
            printf("%d\t", map);
      printf("\n");
    }
    return 0;
}就可以了。
优化版:#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>



int main()
{
    int citysum, roadsum;
    int a, b, c;
    scanf("%d%d", &citysum, &roadsum);
    int** map = (int**)malloc(citysum * citysum * sizeof(int));


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


    for (int i = 0; i < roadsum; i++) {
      scanf("%d%d%d", &a, &b, &c);
      map = c;
    }


    for (int i = 0; i < citysum; i++) {
      for (int j = 0; j < citysum; j++) {
            printf("%d\t", map);
      }
      putchar('\n');
    }


    return 0;
}
还可以使用 calloc:#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>



int main()
{
    int citysum, roadsum;
    int a, b, c;
    scanf("%d%d", &citysum, &roadsum);
    int** map = (int**)calloc(citysum * citysum, sizeof(int));


    for (int i = 0; i < roadsum; i++) {
      scanf("%d%d%d", &a, &b, &c);
      map = c;
    }


    for (int i = 0; i < citysum; i++) {
      for (int j = 0; j < citysum; j++) {
            printf("%d\t", map);
      }
      putchar('\n');
    }


    return 0;
}

sunrise085 发表于 2020-7-26 21:05:55

因为你用的编译器不允许定义可变数组,在编译的时候citysum是未知的,所以编译器认为数组map是可变长度,无法分配空间,这就出错了。
页: [1]
查看完整版本: c++报错