使用C中的函数进行选择排序时出错

时间:2017-07-16 15:22:56

标签: c

我正在尝试使用名为min()的函数进行选择排序。

这是我的代码:

#include <stdio.h>
#include <conio.h>

void main() {
    int i, temp, arr[20], n, loc;
    int min(int [], int, int);
    printf("Enter a range of the array");
    scanf("%d", &n);
    for (i = 0; i < n; i++) {
        printf("Enter elements");
        scanf("%d", arr[i]);
    }
    for (i = 0; i < n; i++) {
        loc = min(arr, i, n);
        temp = arr[i];
        arr[i] = arr[loc];
        arr[loc] = temp;
    }
    min(int arr[], int i, int n) {
        int j, loc, temp;
        for (j = i + 1; j < n; j++) {
            if (arr[i] > arr[j]) {
                temp = j;
            }
        }
        return (temp);
     }
     getch();
}

编译时编译器发出一个错误。 它说:

Error SELECTIONSORT.C 22: Expression Syntax.
根据我的编译器Turbo C ++,

我的第22行是min(int arr[],int i, int n)

请指导我哪里出错了。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:3)

您的代码中存在多个问题:

  • 必须在min函数的正文之外定义函数main()

  • 请注意,在本地范围内声明函数原型被认为是不好的样式。在main()函数之前定义函数或将原型放在main()函数之前。

  • main()不带参数的原型也应为int main(void)

  • 在功能min中,您必须将temp初始化为i,或直接使用i

  • 您应该在排序后打印数组内容,否则程序无效。

以下是更正后的版本:

#include <stdio.h>
#include <conio.h>

int min(int [], int, int);

int main(void) {
    int i, temp, arr[20], n, loc;
    printf("Enter a range of the array: ");
    if (scanf("%d", &n) == 1) {
        for (i = 0; i < n && i < 20; i++) {
            printf("Enter element %d: ", i);
            if (scanf("%d", &arr[i]) != 1)
                break;
        }
        n = i; // n is the actual number of inputs
        for (i = 0; i < n; i++) {
            loc = min(arr, i, n);
            temp = arr[i];
            arr[i] = arr[loc];
            arr[loc] = temp;
        }
        for (i = 0; i < n; i++) {
            printf("%d\n" array[i]);
        }
    }
    getch();
    return 0;
}

int min(int arr[], int i, int n) {
    int j;
    for (j = i + 1; j < n; j++) {
        if (arr[i] > arr[j]) {
            i = j;
        }
    }
    return i;
 }