Вы должны использовать контейнеры и алгоритмы stl, когда это возможно.Это экономит вам много работы и проблем.Там уже есть функция для вашей проблемы.В вашем описании вы просите сортировку значений.В предоставленном коде вы запрашиваете только минимальное и максимальное значения.Минимальное / максимальное решение будет следующим:
#include <algorithm>
#include <iostream>
int main() {
std::array<float, 3> a;
std::cin >> a[0] >> a[1] >> a[2];
auto [a_min, a_max] = std::minmax({a[0], a[1], a[2]});
std::cout << "Min: " << a_min << "\nMax: " << a_max << '\n';
return 0;
}
std::minmax
ожидает список значений и возвращает std::pair
с минимальными и максимальными значениями.Это не изменит контейнер.auto [a_min, a_max]
- это структурированная привязка, в которой первое значение пары хранится в a_min
, а второе - в a_max
.
. Вот решение проблемы сортировки
#include <algorithm>
#include <iostream>
int main() {
std::array<float, 3> a;
std::cin >> a[0] >> a[1] >> a[2];
std::sort(std::begin(a), std::end(a));
for (const auto &el : a) {
std::cout << el << ' ';
}
return 0;
}
std::sort
ожидает итератор в начало и итератор в конец вашего контейнера.Он отсортирует ваш фактический контейнер и не предоставит отсортированную копию.Основанный на диапазоне цикл for
for (const auto &el : a) {
- это простой способ перебора вашего контейнера.
Также для исправления текущего кода вы можете добавить новую переменную:
#include <iostream>
int main() {
float a, b, c;
std::cin >> a >> b >> c;
float maxx = a;
if (b > maxx) { maxx = b; }
if (c > maxx) { maxx = c; }
float minn = b;
if (a < minn) { minn = a; }
if (c < minn) { minn = c; }
float midd = c;
if (a > minn && a < maxx) { midd = a; }
if (b > minn && b < maxx) { midd = b; }
std::cout << minn << ' ' << midd << ' ' << maxx;
}