Привет, я создаю мини-цикл с массивами, чтобы найти наибольшее число из массива, но результатом являются случайные числа, вот мой код

int highest( int num1, int num2, int num3 ){
int bracket[] = {num1, num2, num3};
int result{0};

for ( int i = 0; i < sizeof(bracket); i++)
{
   if ( bracket[i] > result )
   {
       result = bracket[i];
   }
}

return result;

}

Например int highest( 5, 99, 1 )

Результат 1984875712, но я ожидал 99

В чем проблема?, спасибо

-1
Nico A.L 26 Янв 2022 в 12:00
2
Осторожно, sizeof(bracket) не дает вам количество элементов в скобках.
 – 
Yves Daoust
26 Янв 2022 в 12:01
2
Используйте std::vector с std::vector::size().
 – 
Louis Go
26 Янв 2022 в 12:06
1
Не важно, но всего лишь для трех значений переход к массиву не так уж и полезен. «Один лайнер»: if (n2 > n1) n1= n2; if (n3 > n1) n1= n3; return n1;
 – 
Yves Daoust
26 Янв 2022 в 12:09
2
Для реального использования обычно лучше использовать std::max_element. Также обратите внимание, что этот код не будет работать для массива типа [-1, -99, -20], показывая самое большое значение как 0, даже если его нет в массиве.
 – 
Jerry Coffin
26 Янв 2022 в 12:11
1
std::cout << sizeof(bracket) << "\n"; -- Что это выводит? Бьюсь об заклад, что не 3. В чем проблема? -- Кроме того, если бы вы отлаживали свой код с помощью отладчика, вы бы очень легко увидели, что цикл выполняется более 3 раз, таким образом указывая на наличие что-то не так с использованием sizeof(bracket) в конструкции цикла for.
 – 
PaulMcKenzie
26 Янв 2022 в 12:16

3 ответа

Длина массива sizeof(bracket) / sizeof(*bracket)

3
w00drow 26 Янв 2022 в 12:06
Осмелимся ли мы также сказать, что это 3?
 – 
Yves Daoust
26 Янв 2022 в 12:08
Я использовал эту конструкцию миллион раз. Вероятно, отсутствует оператор lengthof...
 – 
Yves Daoust
26 Янв 2022 в 12:11
Почему мы должны использовать / sizeof(*bracket)? @w00drow
 – 
Nico A.L
26 Янв 2022 в 12:30
В C++ мы должны предпочесть std::size(bracket).
 – 
Evg
26 Янв 2022 в 12:31
@NicoAL sizeof возвращает количество байтов, поэтому его нужно разделить на sizeof элемента
 – 
w00drow
26 Янв 2022 в 12:59

Вы можете использовать вектор вместо массива.

vector <int> bracket{ num1, num2, num3 };
int result = *max_element(bracket.begin(), bracket.end());

Проверить о векторах здесь

Проверьте max_element здесь

1
Aryan 26 Янв 2022 в 12:22
Спасибо чувак! Попробую
 – 
Nico A.L
26 Янв 2022 в 12:31

В C++ для удобства лучше использовать std::vector или std::array. Причина в том, что он выходит за пределы, sizeof(bracket)/sizeof(int) - это размер массива

0
terry zhao 26 Янв 2022 в 12:53