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