1

ユーザーが入力する整数のセットから最大値と最小値を見つけるためにポインターを使用して、動的配列を使用するプログラムを作成しました。

実際には最大の出力を取得できますが、最小の出力は取得できません。maxの関数からの計算後に動的配列が0になることがわかり、minが割り当てられた値の値になるようにしました。

なぜこのようになっているのかわかりません-多くの方法を試しましたが、これらは役に立たなかったので、誰かが理由を説明し、可能であれば解決策を提供するか、解決方法のヒントを教えてください。


返信ありがとうございます

私のコードがあなたと混同していたようです

ごめん

整数の量から最大桁数と最小桁数を取得するというプログラムの意図

私が言おうとしたのは、maxの関数から計算した後、動的配列のデータが0になり、プログラムがminの関数を通過すると、動的配列のデータが設定されているため実行されないということです0に

だから実際に私が聞きたいのは、動的配列からのデータが最大の関数の後に0にならないようにする方法があるということですか?

下手な英語でごめんなさい

#include <iostream>
using namespace std;

void max(int*, int);
void min(int*, int);

int main()
{
   int *ptr;
   int i;
   int size;

   cout << "how many integer: ";
   cin >> size;

   ptr = new int[size];

   for (i = 0; i < size; i++)
   {
      cout << "integer#" << i << ": ";
      cin >> *ptr + i;
   }

   max(ptr, size);
   min(ptr, size);

   delete [] ptr;

   return;
}

void max(int* ptr, int size)
{
   int i;
   int j;
   int max = 0;

   for (i = 0; i < size; i++)
   {
      while (*ptr + i != 0)
      {
         j = *ptr + i % 10;

         if (j > max)
         {
            max = j;
         }

         *ptr + i /= 10;
      }
   }

   cout << max << endl;
}

void min(int* ptr, int size)
{
   int i;
   int j;
   int min= 0;

   for (i = 0; i < size; i++)
   {
      while (*ptr + i != 0)
      {
         j = *ptr + i % 10;

         if (j < min)
         {
            min= j;
         }

         *ptr + i /= 10;
      }
   }

   cout << min<< endl;
}
4

2 に答える 2

1

どのコンパイラを使用したかはわかりませんが、GCC4.6にいくつかの変更を加えないとコードはコンパイルされません。

  1. すべて*ptr + iがになり*(ptr + i)ます。
  2. return;の終わりにmain()なりreturn 0;ます。

もう1つの問題は、関数で、としてvoid min(int* ptr, int size)初期化していることです。あなたが本当にすべきことは、それが可能な限り最高の整数値を持つようにすることです。を忘れないでください。min0int min = std::numeric_limits<int>::max();min#include <limits>

これは、元の配列を変更せずに最小桁最大桁を見つけるコードです(グッドプラクティス)。

void max(int* ptr, int size) {
    int i;
    int j;
    int temp;
    int max = 0;

    for(i = 0; i < size; i++) {
        temp = *(ptr + i);
        while (temp != 0) {
            j = temp % 10;
            if (j > max)
                max = j;
            temp /= 10;
        }
    }

    cout << max << endl;
}

void min(int* ptr, int size) {
    int i;
    int j;
    int temp;
    int min = 10;

    for(i = 0; i < size; i++) {
        temp = *(ptr + i);
        while (temp != 0) {
            j = temp % 10;
            if (j < min)
                min = j;
            temp /= 10;
        }
    }

    cout << min<< endl;
}
于 2012-09-24T05:08:41.290 に答える
0

ここでの問題の 1 つは、演算子の優先順位です。

*ptr + ii 番目の要素にアクセスするために使用しようとしています。Dereferencing( *) は最高の優先順位を持ち、加算の前に評価されます。

*(ptr +i)または、より一般的な方法ptr[i]でうまくいくはずです。

于 2012-09-24T04:57:15.873 に答える