用c语言排序数组错误

时间:2015-09-30 16:28:28

标签: c arrays sorting visual-studio-2013

计划在列表中列出每位玩家的得分数

在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;
}

2 个答案:

答案 0 :(得分:4)

Visual Studio 2013有一个非常陈旧且吱吱作响的C编译器,即使经过这么多年,它仍然还没有理解C99。所以你需要改变这个:

int howmany = 10;
int goal[howmany];

为:

#define howmany 10
int goal[howmany];

答案 1 :(得分:0)

好吧,首先swapedswapped不一样。您似乎遇到了令人讨厌的拼写错误,如果您将编译器首选项设置为显示警告(例如-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