Я пишу код для назначения, который хочет, чтобы я создал программу, которая запрашивает у пользователя количество целых чисел, которые он хотел бы ввести, а затем принимает каждый ввод при проверке, является ли значение максимальным или минимальным. Моя программа работает нормально для каждого введенного целого числа, кроме 1. Когда я ввожу int 1, записывается только максимальное значение, даже несмотря на то, что введенное число технически является также минимальным, это связано с оператором if, вызывающим повторение цикла после его появления out, если число является максимальным или минимальным, и в этом случае число всегда будет максимальным, поэтому тест никогда не будет повторяться. Как я могу это исправить?
#include <iostream>
using namespace std;
int main()
{
int input;
int tmp;
int counter = 1;
int max_num=0;
int min_num;
//prompt user for integer amount
cout << "How many integers would you like to enter? " << endl;
cin >> input;
cout<< "Please enter " << input << " integers." << endl;
tmp = input;//loop for requested amount with a test for each input
while (counter <= tmp){
cin >> input;
//if smaller than previous number it is the minimum
if (input < min_num){
min_num = input;
counter++;
}
// if larger than previous number it becomes max number
else if (input > max_num){
max_num = input;
counter++;
}//continue loop if number isn't bigger than max or smaller than min
else {
counter++;
}}
//display the max and min
cout << "min: "<< min_num << endl;
cout << "max: " << max_num<< endl;;return 0;
}
int max_num = -1;
int min_num = -1
while (counter <= tmp){
cin >> input;
//if smaller than previous number it is the minimum
if (input < min_num || min_num == -1){
min_num = input;
//counter++; => This operation is carried out in every case. Why not just do it once?
}
// if larger than previous number it becomes max number
// Else statement not needed here, What if user inputs only one number. It will be both max and min
if (input > max_num){
max_num = input;
//counter++;
}
//continue loop if number isn't bigger than max or smaller than min
counter++;
}
В заявлении if (input < min_num)
значение min_num
не определено, потому что вы не присвоили никакого значения min_num
, Вы хотите #include <climits>
и инициализировать min_num
в INT_MAX
,
Проблема возникает в результате значения по умолчанию int min_num, которое равно 0, потому что min_num является глобальной переменной. Добавьте эти строки кода непосредственно перед циклом while, и он должен работать нормально.
if(input >= 1)
cin >> min_num;
tmp = input-1;
if((input==1)&&(min_num > max_num)){
max_num = min_num;
min_num = 0;
}
Если добавлено только одно целое число, результат меняется на противоположный. Поэтому нам нужна проверка ошибок. Кстати, код не очень хорош.
Попробуйте этот код
#include <iostream>
#include <limits>
using namespace std;
int main() {
int n, input, max_num, min_num;
max_num = numeric_limits<int>::min();
min_num = numeric_limits<int>::max();
cin >> n;
while (n--) {
cin >> input;
max_num = max(max_num, input);
min_num = min(min_num, input);
}
cout << "min: " << min_num << "\nmax: " << max_num << endl;
return 0;
}
вход
2
34
65
Выход
min: 34
max: 65