1

我创建了一个程序,该程序将通过使用指针从用户将输入的整数集合中找到最大值和最小值来使用动态数组。

我实际上可以获得最大值的输出,但不是最小值;我发现我的动态数组通过max的函数计算后会为0,并使我的min成为min的赋值值。

我不知道为什么会这样-我尝试了很多方法,但是这些方法都没有用,所以有人可以解释原因,并在可能的情况下提供解决方案或给我一些提示以了解如何通过解决方案吗?


谢谢你的回复

好像我的代码让你感到困惑

对不起

程序意图从一定数量的整数中获取最大和最小数字

我想说的是,从max函数计算后,动态数组中的数据会变成0,当程序经过min函数时,它不会运行,因为已经设置了动态数组中的数据为 0

所以实际上我想问的是有没有办法让动态数组中的数据在max函数之后不会变成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

我不知道你用的是什么编译器,但你的代码甚至没有在我的 GCC 4.6 上进行一些修改就无法编译。

  1. *ptr + i变成了*(ptr + i)
  2. return;最后main()变成return 0;.

另一个问题是在函数中void min(int* ptr, int size),您正在初始化min0. 您真正应该做的是int 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

这里的一个问题是运算符的优先级。

您正在尝试使用*ptr + i来访问第 i 个元素。Dereferencing( *) 具有最高优先级并在添加之前进行评估。

*(ptr +i)或更常见的ptr[i]应该可以解决问题。

于 2012-09-24T04:57:15.873 回答