1

私はC++を初めて使用し、2つの単純な関数を作成しようとしていますが、問題が発生します。

私は次のことをしようとしています:

1.Function for input some data.
2.Function to show what data is input.

シンプルにしたいだけです。これまでに書いたコードは次のとおりです。

#include <iostream>
void masiv()
{
  int x[10];
  int n, i;
  int min;
  int max=0, imax=0, imin;

  cout << "Enter the number of elements: ";
  cin >> n;

  for(i=0; i < n; i++)
  {
      cout << "Input value for x["<<i<<"]=";
      cin >> x[i];

  if (min > x[i])
  {
      min = x [i];
      imin = i;
  }

  if (max < x[i])
  {
     max = x[i];
     imax = i;
  }
}
void rezult()
{
  cout << "the smallest value on is xthe biggest value on is x["<<imin<<"]=" << min <<endl;
  cout << "nai golqmata stoinost e na x["<<imax<<"]=" << max <<endl;
}
void main()
{
  masiv();
  rezult();
}

たくさんのエラーが発生しました。私はこれが貧弱なコードであることを知っていますが、私が言ったように私はまだ始めたばかりです。ありがとう

PS私の英語でごめんなさい

編集:このコードでの作業。

#include <iostream>
using namespace std;

void masiv(int& min, int&max)
{
 int x[10];
 int n;
 int i;
 int imin, imax;
 cout << "Enter the number of elements: ";
 cin >> n;
 for(i=0; i < n; i++)
 {
  cout << "Input value for x["<<i<<"]=";
  cin >> x[i];
  if(min > x[i])
  {
    min = x [i];
    imin = i;
  }
  if(max < x[i])
  {
    max = x[i];
    imax = i;
  }
 }
}

 void rezult(int min, int max)
{
 cout << "the smallest value on is x= " << min << endl;
 cout << "the biggest value on is x= " << max << endl;
 system ("pause");
}

int main(int argc, char** argv)
{
 int min = 999999; 
 int max = -999999;
 masiv(min,max);
 rezult(min,max);
 return 0;
}
4

5 に答える 5

6

min変数は初期化されないため、大きな値に初期化する必要があります。

配列を宣言しint x[10];ますが、後でユーザーがcin>>n10より大きいか負であるかを確認せずに、値の数を入力できるようにします。これにより問題が発生する可能性があります。

maxとminは、関数masiv()でのみ宣言されており、関数の外部からは到達できません。それらをアクセス可能にしたい場合は、たとえば、関数内で宣言する代わりに、関数に渡すことができます。

void masiv(int& min, int&max) // pass by reference
{...}

void rezult(int min, int max)
{...}

int main(int argc, char** argv) // proper main prototype
{
   int min = 999999; 
   int max = -999999;
   masiv(min,max);
   rezult(min,max);
   return 0;
}

編集:そして名前空間stdを使用して追加します; ファイルの開始時

#include <iostream>
using namespace std;
于 2012-06-15T06:35:45.710 に答える
2

少なくとも、、、の名前空間を修飾する必要があります。これらはすべて名前空間にcoutありcin ます。endlstd

ローカルスコープの変数の問題については、のシグネチャを変更して、最小値と最大値を含むmasivを返すようにします。std::pair<int,int>

typedef std::pair<int,int> MinMax;

MinMax massiv() { .... }

なぜ合格もmin参照もmaxしないのですか?渡された参照の値に依存するためです。それらが妥当かどうかなどを確認する必要があります。関数自体から最小値と最大値を返すと、関数が完全に制御されます。

于 2012-06-15T06:28:51.877 に答える
2

ここでデータフローについて考える必要があります。

メイン関数は2つの関数を実行しますが、データはどのようにしてmassiv関数から、または結果関数に入るのですか?

グローバルを使用することも、メインを次のように構造化することもできます。

void main()
{
    int x[10];
    massiv(x);
    rezult(x);
}

rezult関数は、結果をxで処理し、最小変数と最大変数を設定する必要があります。ifステートメントをmassivからrezultに移動します。

于 2012-06-15T06:38:01.783 に答える
-3

まず、すべての変数はmassiv()関数でローカルに定義され、グローバルを最初にします。

于 2012-06-15T06:28:01.300 に答える
-3

imin 、minimax、およびmaxは、関数rezult()がそれらにアクセスするためにグローバルにする必要があります

于 2012-06-15T06:30:16.727 に答える