2016-12-02 4 views
-5

私はC++で値の整数を並べ替える関数を書こうとしています。 = 5、B = 2、C = 3、それがBにそれらを注文するかのたとえば、C、整数を値の順に並べ替えようとしています

これは私がこれまで持っているコードです:

#include "stdafx.h" 
#include <iostream> 

using namespace std; 

void sortThreeIns(int a, int b, int c); 

int main() 
{ 
int a = 3; 
int b = 4; 
int c = 1; 

sortThreeIns(a, b, c) 
{ 
    if (a > b) 
    { 
     int temp = a; 
     a = b; 
     b = temp; 
    } 
    if(a > c) 
    { 
     int temp = a; 
     a = c; 
     c = temp; 
    } 
    if (b > c) 
    { 
     int temp = b; 
     b = c; 
     c = temp; 
    } 
    return 0; 
} 


return 0; 
} 

は、これは私を返す続けて6 "expected a;"のような構文エラーと "構文エラー:if"しかし、私はなぜわからないのですか? 助けてください?

+3

すごい迫力、いいえ、本に戻ると、これは有効なC++ではありません。 – DeiDei

+1

関数定義を別の関数の中に入れることはできません。 – user463035818

+1

C++でネストされた関数は使用できません。 'sortThreeIns'は' main'関数の外で定義され、別の関数のように適切に呼び出されなければなりません。 [初心者向けの本やチュートリアルを読む](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)をご覧ください。 –

答えて

3

ローカル関数定義は、C++では不正です。

現在、sortThreeInsは、であり、は、main()であると定義されています。したがって、コンパイラはエラーを出します。

の全機能を上記のmain()と書いてこれを修正します。また、voidとマークしたので、returnの値を使用しないでください。

機能に加えられた変更が呼び出し元の変数に反映されているので、あなたはまた、(すなわちrefererenceによってパラメータを渡すvoid sortThreeIns(int& a, int& b, int c&);にプロトタイプを変更する必要があります。

最後に、std::swapを使用して、独自のコードではなく2つの要素を交換することを検討してください。

+0

ありがとう、私は非常にC + +を使用しているので、私は忘れてしまった機能は、メインの外で定義され、メインの中で一度呼び出す必要が忘れてしまった! 私はスワップについてどこで読むことができるか知っていますか? –

+0

http://en.cppreference.com/w/cpp/algorithm/swapを参照してください。 –

0

あなたは、STLを使用して、あなたが学術的な運動としてこれをやっていないから禁じられていない場合、あなたはstd::vectorstd::sortを使用することができますが:

std::vector<int> toSort {3, 4, 1}; 
std::sort(toSort.begin(), toSort.end()); 
// toSort now contains 1, 3, 4 

ここにオンライン例:http://melpon.org/wandbox/permlink/NL6CyCSPhz6v5hgm

関連する問題