Привет, я создаю мини-цикл с массивами, чтобы найти наибольшее число из массива, но результатом являются случайные числа, вот мой код
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
В чем проблема?, спасибо
3 ответа
Длина массива sizeof(bracket) / sizeof(*bracket)
lengthof
...
/ sizeof(*bracket)
? @w00drow
std::size(bracket)
.
Вы можете использовать вектор вместо массива.
vector <int> bracket{ num1, num2, num3 };
int result = *max_element(bracket.begin(), bracket.end());
Проверить о векторах здесь
Проверьте max_element здесь
В C++ для удобства лучше использовать std::vector или std::array. Причина в том, что он выходит за пределы, sizeof(bracket)/sizeof(int) - это размер массива
Похожие вопросы
Новые вопросы
c++
C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который должен быть) скомпилирован с помощью компилятора C ++. Используйте тег для конкретной версии для вопросов, связанных с конкретной версией стандарта [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] или [C ++ 23] и т. Д. .
std::vector
сstd::vector::size()
.if (n2 > n1) n1= n2; if (n3 > n1) n1= n3; return n1;
std::max_element
. Также обратите внимание, что этот код не будет работать для массива типа [-1, -99, -20], показывая самое большое значение как 0, даже если его нет в массиве.std::cout << sizeof(bracket) << "\n";
-- Что это выводит? Бьюсь об заклад, что не 3. В чем проблема? -- Кроме того, если бы вы отлаживали свой код с помощью отладчика, вы бы очень легко увидели, что цикл выполняется более 3 раз, таким образом указывая на наличие что-то не так с использованиемsizeof(bracket)
в конструкции циклаfor
.