我创建了一个程序,该程序将通过使用指针从用户将输入的整数集中查找最大值和最小值来使用动态数组。
其实我可以得到max的输出,但是min不行;我发现我的动态数组经过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;
}
最佳答案
我不知道你用的是什么编译器,但你的代码在我的 GCC 4.6 上如果不做一些修改甚至无法编译。
- 所有
*ptr + i
变成*(ptr + i)
. -
return;
在main()
的末尾变成return 0;
.
另一个问题是在函数 void min(int* ptr, int size)
中, 你正在初始化 min
作为0
.你真正应该做的是 int min = std::numeric_limits<int>::max();
这样min
具有最高可能的整数值。不要忘记 #include <limits>
.
这是一个代码,它可以在不修改原始数组的情况下找到最小数字和最大数字(a好的做法),
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;
}
关于c++ - 动态数组到两个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12559007/