鱼C论坛

 找回密码
 立即注册
查看: 1567|回复: 29

[已解决]c语言,报错问题

[复制链接]
发表于 2021-12-11 11:56:37 | 显示全部楼层 |阅读模式

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

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

x
......
        int m,p,n;
        
        // 定义第一个矩阵
        printf("请输入第一个矩阵的尺寸(M * P):");
        scanf("%d * %d",&m,&p);
        int str_1[m][p];

        // 定义第二个矩阵
        printf("请输入第二个矩阵的尺寸(P * N):");
        scanf("%d * %d",&p,&n);
        int str_2[p][n];
......
为什么这一段我这样写会报错?不理解啊
最佳答案
2021-12-11 13:54:40

把n, p换成数字(常量)就可以了,不要scanf输入
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-11 11:59:17 From FishC Mobile | 显示全部楼层
scanf("%d * %d",&m,&p); 改成  scanf("%d%d",&m,&p);

输入例子:
4 3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-11 12:14:19 | 显示全部楼层
傻眼貓咪 发表于 2021-12-11 11:59
scanf("%d * %d",&m,&p); 改成  scanf("%d%d",&m,&p);

输入例子:

这个格式不对吗?可是小甲鱼也是这样写的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-11 12:45:15 | 显示全部楼层
傻眼貓咪 发表于 2021-12-11 11:59
scanf("%d * %d",&m,&p); 改成  scanf("%d%d",&m,&p);

输入例子:
int m,p,n;
        
        // 定义第一个矩阵
        printf("请输入第一个矩阵的尺寸(M * P):");
        scanf("%d%d",&m,&p);
        /*int str_1[m][p];*/

        // 定义第二个矩阵
        printf("请输入第二个矩阵的尺寸(P * N):");
        scanf("%d%d",&p,&n);
        /*int str_2[p][n];*/
  
        // 初始化存放乘积的二维数组
        /*int str1_2[m][n];*/
        for(i = 0; i < m; i++)
        {
                for(j = 0; j < n; j++)
                {
                        str1_2[i][j] = 0;
                }
        }
改了,但还是报错,看我用/* .....*/注释的这三部分,这三个地方报错了
是定义错了还是编译器的问题呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-11 12:54:51 From FishC Mobile | 显示全部楼层
报错写什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-11 12:56:34 From FishC Mobile | 显示全部楼层
小亦003 发表于 2021-12-11 12:14
这个格式不对吗?可是小甲鱼也是这样写的

没有不对,只是如果格式这样,输入就必须依照这样的格式输入,一般初学者容易在这里弄错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-11 13:16:12 | 显示全部楼层
小亦003 发表于 2021-12-11 12:45
改了,但还是报错,看我用/* .....*/注释的这三部分,这三个地方报错了
是定义错了还是编译 ...

数组定义不能是变量!明显新手容易犯的错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-11 13:27:57 | 显示全部楼层
c语言不支持这样动态定义数组,数组[ ]内的值必须是常量,而不是变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-11 13:28:06 | 显示全部楼层
a327904410 发表于 2021-12-11 13:16
数组定义不能是变量!明显新手容易犯的错误
$ ls
main.c
$ cat main.c
#include <stdio.h>

int main(void) {
    size_t n; scanf("%lu", &n);
    size_t array[n];
    for(size_t i = 0; i < n; ++i) {
        size_t temp; scanf("%lu", &temp);
        array[i] = temp;
    }
    for(size_t i = 0; i < n; ++i) {
        printf("%lu ", array[i]);
    }
    puts("");
    return 0;
}
$ gcc -g -Wall -o main main.c
$ ls
main  main.c
$ ./main
3
1 2 3
1 2 3
$ ./main
5
9 8 7 1 2
9 8 7 1 2
$ gcc --version
gcc (GCC) 11.1.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

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

使用道具 举报

 楼主| 发表于 2021-12-11 13:43:07 | 显示全部楼层

cpp(15) : error C2057: expected constant expression
.cpp(15) : error C2466: cannot allocate an array of constant size 0
.cpp(15) : error C2057: expected constant expression
.cpp(15) : error C2466: cannot allocate an array of constant size 0
.cpp(15) : error C2087: '<Unknown>' : missing subscript
.cpp(15) : error C2133: 'str_1' : unknown size
.cpp(20) : error C2057: expected constant expression
.cpp(20) : error C2466: cannot allocate an array of constant size 0
.cpp(20) : error C2057: expected constant expression
.cpp(20) : error C2466: cannot allocate an array of constant size 0
.cpp(20) : error C2087: '<Unknown>' : missing subscript
.cpp(20) : error C2133: 'str_2' : unknown size
.cpp(24) : error C2057: expected constant expression
.cpp(24) : error C2466: cannot allocate an array of constant size 0
.cpp(24) : error C2057: expected constant expression
.cpp(24) : error C2466: cannot allocate an array of constant size 0
.cpp(24) : error C2087: '<Unknown>' : missing subscript
.cpp(24) : error C2133: 'str1_2' : unknown size
执行 cl.exe 时出错.

void指针和NULL指针:动动手0.obj - 1 error(s), 0 warning(s)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-11 13:46:08 | 显示全部楼层

我的编译器定义数组不能是变量,你的代码我这边也是这种错误。我用的vs
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-11 13:48:15 | 显示全部楼层

"size_t" 也是定义整型的么,没学过还不了解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-11 13:49:13 | 显示全部楼层
a327904410 发表于 2021-12-11 13:16
数组定义不能是变量!明显新手容易犯的错误

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

使用道具 举报

 楼主| 发表于 2021-12-11 13:50:22 | 显示全部楼层
18202486056 发表于 2021-12-11 13:27
c语言不支持这样动态定义数组,数组[ ]内的值必须是常量,而不是变量

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

使用道具 举报

 楼主| 发表于 2021-12-11 13:53:35 | 显示全部楼层
小亦003 发表于 2021-12-11 13:43
cpp(15) : error C2057: expected constant expression
.cpp(15) : error C2466: cannot allocate an ar ...

对应我注释的那三句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-11 13:54:40 | 显示全部楼层    本楼为最佳答案   

把n, p换成数字(常量)就可以了,不要scanf输入
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-11 13:56:34 | 显示全部楼层
小亦003 发表于 2021-12-11 13:48
"size_t" 也是定义整型的么,没学过还不了解

size_t 就是正整型,如同 unsigned int
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-11 14:08:30 From FishC Mobile | 显示全部楼层
a327904410 发表于 2021-12-11 13:54
把n, p换成数字(常量)就可以了,不要scanf输入

那如果是需要用户用键盘输入数字来定义矩阵的大小,该怎么写呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-11 14:09:03 | 显示全部楼层
楼主的编译器应该不支援 C99 吧?现在的 C 语言编译器大部分都支援不是动态定义数组了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-11 14:18:57 | 显示全部楼层
小亦003 发表于 2021-12-11 14:08
那如果是需要用户用键盘输入数字来定义矩阵的大小,该怎么写呢?

可以用动态数组
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 07:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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