我想使用函数找到数组中的最大和最小数字。这是我的代码:
#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;
}
还有输出:
##### Find lowest and highest number in collection #####
Array checked: [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
Min: 1
Max: 32767
Array checked: [ 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 ]
Min: 1
Max: 32767
Process finished with exit code 0
我猜测指针有问题,但它是什么?
答案 0 :(得分:2)
你应该初始化你的最小/最大:
int min, max;
像:
int min=INT_MAX, max=INT_MIN;
更多的c ++风格,你会使用#include <limits>
和:
int min = std::numeric_limits<int>::max();
int max = std::numeric_limits<int>::min();
[编辑]
您还应该(在评论中)删除逻辑中的else
:
if (*min > numbers[i]) *min = numbers[i];
else if (*max < numbers[i]) *max = numbers[i];
否则您可能永远不会在结果中找到最大值。
答案 1 :(得分:1)
if (*min > numbers[i])
假设*min
已包含合法值。
但是你没有初始化你传递地址的整数。一个可能的修复(包括limits.h
之后(或climits
,如果真的正在编译C ++)):
int min=INT_MAX;
int max=INT_MIN;
正如 Nathan Oliver 在评论中所建议的那样。更强大的解决方案是将min
和max
设置为数组的第一个元素。
if (min && max && numbers && size > 0) {
*min = numbers[0];
*max = numbers[0];
}
答案 2 :(得分:1)
当您与min和max的值进行比较时,在将值传递给function之前,您应该初始化值min = INT_MAX和max = INT_MIN。
答案 3 :(得分:1)
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
}
}
}
编辑:您必须决定size
为零时应该发生什么。空列表的最小值和最大值是多少?
答案 4 :(得分:0)
初始化int min, max;
之类的变量时,将它们留空而不是数字,这意味着min和max会自动设置为未定义的数字。