2017-05-02 70 views
-1

下面的程序是使用函數以升序對數字進行排序。它是用Visual Studio編寫的。Visual studio C編程功能defenition

我知道我在函數聲明中犯了一個錯誤,因爲我聲明int LinearSort();高於main而不是main

程序執行時沒有錯誤,但排序不會發生,因爲函數沒有被調用。

該程序保存爲C++。

任何人都可以幫助我調用該函數並通過編輯程序進行排序嗎?

主文件

#include <stdio.h> 
#include <stdafx.h> 
#include "sort.h" 
#include <conio.h> 
#include <iostream> 

int LinearSort(); 

int main() 
{ 
    int sort[50]; 
    int i=0; 
    int j=0; 
    int k=0; 
    int a = 0; 

    printf("Enter 10 Numbers"); 

    for (i = 0; i < 10; i++) 
    { 
     scanf_s("%d",&sort[i]); 
    } 

    for (i = 0; i < 10; i++) 
    { 
     printf("%d\n",sort[i]); 
    } 


    return 0; 
} 

.C文件

#include "stdafx.h" 
#include "sort.h" 
#include <stdio.h> 
#include <conio.h> 
#include <iostream> 

void LinearSort(int i, int j, int k, int a, int sort[]) 
{ 
    for (j=0; j < i-1; j++) 
    { 
     for (k=0; k < i-j-1; k++) 
     { 
     if(sort[k] < sort[k+1]) 
     { 
      a = sort[k]; 
      sort[k] = sort[k+1]; 
      sort[k+1] = a; 
     } 

     else 
     { 
      sort[j] = sort[j]; 
     } 
    } 
    } 
    for (j = 0; j < i; j++) 
    { 
     printf("ascending %d\n",sort[j]); 
    } 
    _getch(); 

} 

頭文件

#pragma once 
#include <stdio.h> 

extern void LinearSort(int i, int j, int k, int a, int sort[]); 
+0

'Enter 10 Numbers' ...那麼爲什麼你有50個元素的數組? –

+0

那麼爲什麼不從'main'調用'LinearSort'函數呢? (並刪除虛假聲明'int LinearSort();') –

+0

爲什麼你的'LinearSort'函數有這麼多參數?大部分參數應該在函數中聲明爲局部變量。特別是,看起來'j','k'和'​​a'參數應該改爲局部變量,參數'i'保留爲數組長度,'sort'參數作爲指向數組內容的指針。 –

回答

0

你是正確的方式,你的代碼只需要一點點的tweeking。其他人提出了寶貴的建議,其中大部分我不會重複。首先定義LinearSort()。您正在傳遞一些變量(i..k),我們稱其爲局部變量,並且不應傳遞該變量。局部變量只用於你的函數,並在函數內聲明。正確的定義現在變成:

void LinearSort(int a, int sort[]); // prototype; put in header file or above main 

void LinearSort(int a, int sort[]) // function itself 
{ 
    int i, j, k;      // local variables 

然後,您必須在讀取所有數據後從main調用它。這樣稱呼它:

LinearSort(10, sort[]); 

你爲a,因爲你讀的整數固定數量的passs 10;你會讀到一個任意數字(但少於50),你會通過一個這個數量的變量。

對於您的信息:您傳遞數組變量sort[],但請注意,名稱sort在主函數和函數中是相同的。沒有必要,這只是巧合。

至於排序算法,它似乎基於氣泡排序,但使用for循環。這至少是不尋常的,而且是錯誤的;外部循環必須按需要進行多次,直到沒有更多元素被交換爲止;但是,for循環通常會執行固定次數,所以您會明白爲什麼這可能是錯誤的。我建議你閱讀關於冒泡排序。

-2

首先,移除該S

int LinearSort(); 

由於您已經在頭文件中聲明瞭函數,並且頭文件已包含在所有文件中。 你應該撥打電話LinearSort()並在main()以及scanf()之後加上適當的參數。而在你LinearSort()功能,這樣

int main() 
{ 
    int sort[50]; 
    int i=0; 
    int j=0; 
    int k=0; 
    int a = 0; 

    printf("Enter 10 Numbers"); 

    for (i = 0; i < 10; i++) 
    { 
     scanf_s("%d",&sort[i]); 
    } 

    LinearSort(i, j, k, a, sort); 

    for (i = 0; i < 10; i++) 
    { 
     printf("%d\n",sort[i]); 
    } 
    return 0; 
} 

和LinearSort(),在for循環中,我沒有看到任何具體使用else聲明。

+0

我重新編寫了代碼並添加了int LinearSort();以上返回0。我建立了,沒有看到任何錯誤。但是我的函數並沒有調用LinearSort()。當我把int斷點放在LinearSort();代碼執行到printf(「%d \ n」,sort [i]);並返回0 – vikash23

+0

我寫了main()供您參考,試試這個。 – anil

+0

謝謝。代碼工程gr8。最初我加入LinearSort(int i,int j,int k,int a,int sort []);並得到意想不到的錯誤類型'int'。那是我被擊中的地方。 我的假設是我用過else,如果輸入數字與5,5,6,6相同,那麼可以避免執行if循環來排序這4個數字。如果我錯了,我很抱歉。 – vikash23