鱼C论坛

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

[已解决]c++报错

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

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

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

x
代码:
//

#include<stdio.h>

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

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

报错:
[b]
错误        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行
[b]

最佳答案
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[i][j] = 0;


    for (int i = 0; i < roadsum; i++) {
        scanf("%d %d %d", &a, &b, &c);
        map[a][b] = c;
    }
    for (int i = 0; i < citysum; i++) {
        for (int j = 0; j < citysum; j++)
            printf("%d\t", map[i][j]);
        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[a][b] = c;
    }


    for (int i = 0; i < citysum; i++) {
        for (int j = 0; j < citysum; j++) {
            printf("%d\t", map[i][j]);
        }
        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[a][b] = c;
    }


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


    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-7-26 20:50:23 | 显示全部楼层
@Twilight6 给你一个挣最佳的机会
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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



  我还没学 C++

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 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[i][j] = 0;


    for (int i = 0; i < roadsum; i++) {
        scanf("%d %d %d", &a, &b, &c);
        map[a][b] = c;
    }
    for (int i = 0; i < citysum; i++) {
        for (int j = 0; j < citysum; j++)
            printf("%d\t", map[i][j]);
        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[a][b] = c;
    }


    for (int i = 0; i < citysum; i++) {
        for (int j = 0; j < citysum; j++) {
            printf("%d\t", map[i][j]);
        }
        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[a][b] = c;
    }


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


    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-13 10:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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