计划在列表中列出每位玩家的得分数
在C语言代码中对数组进行排序在Visual Studio中显示错误“未评估为常量”。
int main() {
int i,temp,swaped;
int howmany = 10;
int goal[howmany];
for (i = 0;i <= howmany;i++) {
goal[i] = (rand() % 40)+1;
}
printf("orignal list");
for (i = 0;i <= howmany;i++) {
printf("%d \n", goal[i]);
}
while (1) {
swaped = 0;
for (i = 0;i < howmany;i++) {
if (goal[i] > goal[i + 1]) {
goal[i] = temp;
goal[i] = goal[i + 1];
goal[i + 1] = temp;
swaped = 1;
}
}
if (swapped == 0) {
break;
}
printf("sorted list");
for (i = 0;i < howmany;i++) {
printf("%d \n", goal[i]);
}
}
_getch();
return 0;
}
答案 0 :(得分:4)
Visual Studio 2013有一个非常陈旧且吱吱作响的C编译器,即使经过这么多年,它仍然还没有理解C99。所以你需要改变这个:
int howmany = 10;
int goal[howmany];
为:
#define howmany 10
int goal[howmany];
答案 1 :(得分:0)
好吧,首先swaped
与swapped
不一样。您似乎遇到了令人讨厌的拼写错误,如果您将编译器首选项设置为显示警告(例如-Wall -Wextra
),则该错误很明显。
在拼写问题之后,您发现的另一个警告temp
未被初始化使用。它会让你发现你的bubblesort是FUBAR
。 (它还有助于在原始/排序列表'\n'
语句的末尾放置printf
打印值的所有循环限制必须为for (i = 0; i < howmany; i++)
NOT for (i = 0; i <= howmany; i++)
(<=
将使您读取超出数组末尾的内容。)
最后,您可以从错误消息中找到stdlib.h
需要rand()
。
看看以下内容,您可以根据需要在代码正文中实现bubblesort,或者只是将其称为函数,如下所示:
#include <stdio.h>
#include <stdlib.h> /* rand() */
#define howmany 10
void bubblesort (int *a, size_t n);
int main() {
int i/*,temp = 0,swapped*/;
// int howmany = 10;
int goal[howmany];
for (i = 0;i < howmany;i++) {
goal[i] = (rand() % 40)+1;
}
printf("orignal list\n");
for (i = 0;i < howmany;i++) {
printf("%d \n", goal[i]);
}
bubblesort (goal, howmany);
// while (1) {
// swapped = 0;
// for (i = 0;i < howmany;i++) {
// if (goal[i] > goal[i + 1]) {
// goal[i] = temp;
// goal[i] = goal[i + 1];
// goal[i + 1] = temp;
// swapped = 1;
// }
//
// }
// if (swapped == 0) {
// break;
// }
//
// printf("sorted list");
// for (i = 0;i < howmany;i++) {
// printf("%d \n", goal[i]);
// }
// }
printf("sorted list\n");
for (i = 0;i < howmany;i++) {
printf("%d \n", goal[i]);
}
// _getch();
return 0;
}
void bubblesort (int *a, size_t n)
{
size_t i, j;
int temp;
for (i = 0; i < n; i++) {
for (j = 0; j < (n-1); j++) {
if (a[j] > a[j + 1]) {
temp = a[j + 1];
a[j + 1] = a[j];
a[j] = temp;
}
}
}
}
<强>输出强>
$ ./bin/vsnoconst
orignal list
24
7
18
36
34
16
27
13
10
22
3
sorted list
7
10
13
16
18
22
24
27
34
36