所以我正在尝试学习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。我知道有时候这两个编译器可能会有所不同,但我希望有人能让我知道发生了什么或者如何解决这个问题。
答案 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来防止任何这样的错误。