表达式未评估为常量ERROR代码

时间:2017-08-18 17:33:32

标签: c

所以我正在尝试学习C,我正在尝试制作这个代码,因此它会将数组的元素从最低到最高排序,显然不完整,但我只想看到打印的随机数。

无论如何,我收到错误E0028& C2131(视觉工作室)说“表达必须具有恒定值”& “表达没有评估为常数。” int goals[howMany];是VS告诉我我有错误的地方

int main()
{
    int i, temp, swapped;
    int howMany = 10;
    int goals[howMany];

    for (i = 0; i < howMany; i++) {
        goals[i] = (rand() % 25) + 1;

    }

    printf("Original List\n");
        for (i = 0; i < howMany; i++) {
            printf("%d \n", goals[i]);
        }
    return 0;
}

这正是我正在观看的教程中编写代码的方式,他们正在使用Code:Blocks。我知道有时候这两个编译器可能会有所不同,但我希望有人能让我知道发生了什么或者如何解决这个问题。

3 个答案:

答案 0 :(得分:0)

为了使用rand(),你需要包含相应的lib然后&#34;种植一个rand种子&#34; :看看C Rand Function

答案 1 :(得分:0)

Visual Studio不支持可变长度数组。 C有点棘手,你使用的编译器/标志很重要。例如,如果您使用gcc编译器进行编译,则使用-std = c99标志将允许您运行代码而不会出现错误(因为-std = c99支持可变长度数组)。

我不确定Visual Studio中的编译是如何工作的,但那是你的问题。由于这个原因,我通常不喜欢VS中的C编程。我更容易使用类似Vim的东西,并在命令中编译,以便我可以指定编译器设置。

答案 2 :(得分:-1)

const howMany = 10;

这很可能只是您正在使用的编译器。我想这是一个防止分段错误的安全防范。如果在用于初始化数组之后更改了howMany变量,则肯定会产生seg错误。当你访问某些超出界限时,会出现seg错误。如果你试图改变一个const变量,那么编译器就不会让你。通过makeMany const来防止任何这样的错误。