2017-05-02 12 views
-1

以下のプログラムは、関数を使用して昇順にソートします。これはVisual Studioで書かれています。ビジュアルスタジオCプログラミング関数defenition

を上記の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

「10個の数字を入力してください」...次に、50個の要素を持つ配列があるのはなぜですか? –

+0

なぜ 'main'から' LinearSort'関数を呼び出さないのでしょうか? (そして、偽宣言 'int LinearSort();'も削除してください。) –

+0

なぜあなたの 'LinearSort'関数は非常に多くのパラメータを持っていますか?ほとんどのパラメータは、関数内のローカル変数として宣言する必要があります。特に 'j'、' k'、 'a'パラメータをローカル変数に変更し、' i'パラメータを配列の長さにし、 'sort'パラメータを配列の内容へのポインタとして残すように見えます。 –

答えて

0

あなたは正しい方法であり、あなたのコードはちょっとしたことしか必要としません。他の人たちは貴重な提案をしてくれました。

最初にあなたの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 

次に、すべてのデータを読み込んだ後、メインから呼び出す必要があります。好きそれを呼び出す:

LinearSort(10, sort[]); 

あなたが整数の固定数を読んでいるのであなたがaのための10のpasss。任意の数値(50未満)を読んでいれば、この量の変数を渡したでしょう。

あなたの情報:配列変数sort[]を渡しますが、この名前sortは、あなたのメインとあなたの関数で同じであることに注意してください。必要はなく、これはちょうど偶然です。

ソートアルゴリズムは、バブルソートに基づいているようですが、for-loopsを使用しています。それは少なくとも珍しいし、間違っているかもしれません。外側のループは、それ以上要素が交換されなくなるまで必要な回数だけ行わなければならない。しかし、forループは通常、一定回数実行されるため、これがおそらく間違っているのがわかります。バブルソートについてお読みください。

-2

まず、このS削除ttyement

int LinearSort(); 

すでにヘッダファイルとヘッダの機能が宣言されているので、すべてのファイルに含まれています。 scanf()の後にmain()に適切な引数を使用してLinearSort()を呼び出す必要があります。そして、あなたの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()を追加しました。上記を返します。私は構築し、エラーは見られません。しかし、私は関数が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'を得ました。私が殴られた場所。 私の前提は私が他に使用したものです。もし入力番号が5,5,6,6のようなものであれば、それらの4つの数値をソートするためにifループの実行を避けることができます。私が間違っているとすみませます。 – vikash23

関連する問題