2017-07-16 34 views
2

我正在嘗試使用名爲min()的函數進行選擇排序。在選擇排序功能中的錯誤C

這是我的代碼:

#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(); 
} 

編譯時,編譯器是給一個錯誤。 它說:根據我的編譯器的Turbo C++

Error SELECTIONSORT.C 22: Expression Syntax. 

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

請指導我在哪裏出錯。 感謝您的幫助。

+2

1)'分鐘(INT ARR [],INT I,INT N){...}'移動到前'main' – BLUEPIXY

+1

2) 'scanf(「%d」,arr [i]);' - >'scanf(「%d」,&arr [i]);'或'scanf(「%d」,arr + i);' – BLUEPIXY

+1

3 )'int j,loc,temp;' - >'int j,temp = i;','if(arr [i]> arr [j]) - >'if(arr [temp]> arr [ j])' – BLUEPIXY

回答

2

有你的代碼中的多個問題:

  • 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; 
} 
+0

@chqrile非常感謝,先生,詳細解釋和源代碼。 –

+0

使'min'函數成爲'static inline'並且編譯器可能會使用它 - 但是定義應該在它被使用之前出現。 –

+2

@JonathanLeffler:我會這麼做的,但這是超出問題框架的先進理念。帶有全局優化器的編譯器會內聯這個函數,甚至在'main()'之後定義,或者至少他們應該這樣做。 – chqrlie