C++ 查找数组中的最大数将返回最大整数值

C++ 查找数组中的最大数将返回最大整数值,c++,C++,我想使用函数查找数组中的最大值和最小值。这是我的密码: #include <stdio.h> void findLowHigh(int* numbers, int size, int* min, int* max) { for(int i = 0; i < size; i++) { if (*min > numbers[i]) *min = numbers[i]; else if (*max < numbers[i]) *m

我想使用函数查找数组中的最大值和最小值。这是我的密码:

#include <stdio.h>

void findLowHigh(int* numbers, int size, int* min, int* max) {
    for(int i = 0; i < size; i++) {
        if (*min > numbers[i]) *min = numbers[i];
        else if (*max < numbers[i]) *max = numbers[i];
    }
}

int main() {
    printf("##### Find lowest and highest number in collection #####");
    printf("\n Array checked: [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]");
    int min, max;
    int numbers1[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    findLowHigh(numbers1, 10, &min, &max);
    printf("\nMin: %d\nMax: %d", min, max);

    printf("\n Array checked: [ 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 ]");
    int numbers2[10] = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
    findLowHigh(numbers2, 10, &min, &max);
    printf("\nMin: %d\nMax: %d", min, max);

    return 0;
}

我猜指针可能有问题,但问题是什么?

您应该初始化最小值/最大值:

int min, max;
比如:

<> > C++风格>使用<代码> >包含< /代码>和:

int min = std::numeric_limits<int>::max();
int max = std::numeric_limits<int>::min();

否则,您可能永远无法在结果中找到最大值。

您应该初始化最小值/最大值:

int min, max;
比如:

<> > C++风格>使用<代码> >包含< /代码>和:

int min = std::numeric_limits<int>::max();
int max = std::numeric_limits<int>::min();
否则,您可能永远无法在结果中找到最大值。

如果(*min>number[i])
假设
*min
已包含合法值

但您不会初始化传递其地址的整数。可能的修复(包括
limits.h
(或
climits
,如果您真的在编译C++)后):


正如内森·奥利弗在评论中建议的那样。更可靠的解决方案是将
min
max
设置为数组的第一个元素

if (min && max && numbers && size > 0) {
  *min = numbers[0];
  *max = numbers[0];
}
if(*min>number[i])
假设
*min
已包含合法值

但您不会初始化传递其地址的整数。可能的修复(包括
limits.h
(或
climits
,如果您真的在编译C++)后):


正如内森·奥利弗在评论中建议的那样。更可靠的解决方案是将
min
max
设置为数组的第一个元素

if (min && max && numbers && size > 0) {
  *min = numbers[0];
  *max = numbers[0];
}

在与最小值和最大值进行比较时,在将值传递给函数之前,应初始化值min=INT_max和max=INT_min。

在与最小值和最大值进行比较时,在将值传递给函数之前,您应该初始化值min=INT\u MAX和MAX=INT\u min。

当您初始化变量时,如
INT min,MAX
将其保留为空而不是数字,这意味着min和max会自动设置为未定义的数字。

当您初始化变量时,如
int min,max
将其保留为空而不是数字,这意味着min和max会自动设置为未定义的数字。

int min,max未初始化,它们可以包含任何值。您应该在
findLowHigh
的开头初始化。在调用findLowHigh之前重置它们很重要,否则过去的结果将影响未来的结果

您可以简单地将它们都设置为
numbers
的第一个元素,并跳过循环中的该元素。首先确保检查
size
是否为非零

void findLowHigh(int* numbers, int size, int* min, int* max) 
{
    if(size > 0)
    {
        *min = numbers[0];
        *max = numbers[0];

        for(int i = 1; i < size; i++) {
            if (*min > numbers[i]) *min = numbers[i];
            if (*max < numbers[i]) *max = numbers[i]; // Also, remove this else
        }
    }
}
void findLowHigh(整数*数字、整数大小、整数*最小值、整数*最大值)
{
如果(大小>0)
{
*最小值=数字[0];
*最大值=数字[0];
对于(int i=1;i数字[i])*min=数字[i];
如果(*max

编辑:您必须决定在
size
为零的情况下应该发生什么。空列表的最小值和最大值是多少?

int-min,max未初始化,它们可以包含任何值。您应该在
findLowHigh
的开头初始化。在调用findLowHigh之前重置它们很重要,否则过去的结果将影响未来的结果

您可以简单地将它们都设置为
numbers
的第一个元素,并跳过循环中的该元素。首先确保检查
size
是否为非零

void findLowHigh(int* numbers, int size, int* min, int* max) 
{
    if(size > 0)
    {
        *min = numbers[0];
        *max = numbers[0];

        for(int i = 1; i < size; i++) {
            if (*min > numbers[i]) *min = numbers[i];
            if (*max < numbers[i]) *max = numbers[i]; // Also, remove this else
        }
    }
}
void findLowHigh(整数*数字、整数大小、整数*最小值、整数*最大值)
{
如果(大小>0)
{
*最小值=数字[0];
*最大值=数字[0];
对于(int i=1;i数字[i])*min=数字[i];
如果(*max

编辑:您必须决定在
size
为零的情况下应该发生什么。空列表的最小值和最大值是多少?

听起来您可能需要学习如何使用调试器逐步完成代码。有了一个好的调试器,您可以逐行执行您的程序,并查看它偏离预期的地方。这是一个必要的工具,如果你要做任何编程。进一步阅读:您的变量没有初始化,所以它被设置为一些单位化的值,在您的情况下是32767,所以max永远不会小于数组中的任何值。您应该将两者初始化为一些合理的值,如
0
或在哪里初始化低和高?@NathanOliver谢谢,我将从中学习。您也可以使用标准库中提供的函数:
std::array numbers1{…}const auto minAndMax=std::minmax_元素(numbers1.begin(),numbers1.end())听起来您可能需要学习如何使用调试器单步执行代码。有了一个好的调试器,您可以逐行执行您的程序,并查看它偏离预期的地方。这是一个必要的工具,如果你要做任何编程。进一步阅读:您的变量没有初始化,所以它被设置为一些单位化的值,在您的情况下是32767,所以max永远不会小于数组中的任何值。您应该将两者初始化为一些合理的值,如
0
或在哪里初始化低和高?@NathanOliver谢谢,我将从中学习。您也可以使用标准库中提供的函数:
std::array numbers1{…}const auto minAndMax=std::minmax_元素(numbers1.begin(),numbers1.end())
然后函数将始终返回
INT_MIN
INT_MAX
作为MIN和MAX.@KrzysztofKraszewski,您不能在那里使用
否则
。。。或者至少不适用于
i==0
@KrzysztofKraszewski-不,不会。任何整数都小于
INT