我正在尝试创建一个循环,该循环允许用户输入整数,直到他们使用数字-99退出程序为止。然后,该程序应该在屏幕上打印最大和最小的数字,但它一直在说我的最小数字是-99。
这是我到目前为止的代码:
#include <iostream>
#include <string>
using namespace std;
int main()
{
//Initialize integers for use
long int number, largest, smallest;
// Set condition for user input
while (number != -99)
{
// Allow user to input numbers to test
cout << " Enter a number to find the smallest and largest integer. " << endl;
cout << " Enter -99 to quit " << endl;
cin >> number;
// Evaluate user input
if (number < smallest)
{
smallest = number;
}
if (number > largest)
{
largest = number;
}
}
cout << " The smallest number you entered was " << smallest << endl;
cout << " The largest number you entered was " << largest << endl;
return 0;
}
阅读后立即检查数字,然后脱离循环,而不是使用它来更新smallest
和largest
。
您还需要初始化smallest
和largest
,然后才能将它们与新数字进行比较。我在下面是通过专门处理循环的第一次迭代(使用first_time
变量(来完成此操作。
#include <iostream>
using namespace std;
int main()
{
//Initialize integers for use
long int number, largest, smallest;
bool first_time = true;
// Set condition for user input
while (true)
{
// Allow user to input numbers to test
cout << " Enter a number to find the smallest and largest integer. " << endl;
cout << " Enter -99 to quit " << endl;
cin >> number;
if (number == -99) {
break;
}
// Evaluate user input
if (first_time) {
smallest = largest = number;
first_time = false;
} else if (number < smallest)
{
smallest = number;
} else if (number > largest)
{
largest = number;
}
}
if (!first_time) {
cout << " The smallest number you entered was " << smallest << endl;
cout << " The largest number you entered was " << largest << endl;
}
return 0;
}
尝试以下代码:
#include <iostream>
using namespace std;
int main()
{
bool isInitialised = false;
//Initialize integers for use
long int number, largest, smallest;
// Set condition for user input
while (true)
{
// Allow user to input numbers to test
cout << " Enter a number to find the smallest and largest integer. " << endl;
cout << " Enter -99 to quit " << endl;
cin >> number;
// if number is -99, break loop
if (number == -99) {
break;
}
// Evaluate user input
if (!isInitialised) {
isInitialised = true;
smallest = number;
largest = number;
// after first input no need to make comparisons.
continue;
}
if (number < smallest)
{
smallest = number;
}
else if (number > largest)
{
largest = number;
}
}
cout << " The smallest number you entered was " << smallest << endl;
cout << " The largest number you entered was " << largest << endl;
return 0;
}
正确的正确。
扰流板警报和警告...
如果您在完成作业之前阅读了这篇文章,您将不会遭受教练想要的痛苦和屈辱。而且他/她会知道这不是您的工作。(我只是想到了一种使它看起来甚至光滑的方法,但现在已经足够光滑了。(
#include <iostream>
#include <numeric>
#include <algorithm>
using namespace std; // Forgive me, for I have sinned.
using int_t = long int;
int_t get_number(int_t &number, int_t &largest, int_t &smallest) {
cout << " >";
while (!(cin >> number)) {
cout << "Try again." << endl;
cout << "> ";
cin.clear(); cin.ignore(10000, 'n');
}
smallest = min(smallest, number);
largest = max(largest, number);
return number;
}
int main()
{
cout << " Enter numbers to find the smallest and largest integer. " << endl;
cout << " Enter -99 to quit " << endl;
int_t largest = numeric_limits<int_t>().min();
int_t smallest = numeric_limits<int_t>().max();
int_t number = get_number(number, largest, smallest);
while(-99 != number) {
number = get_number(number, largest, smallest);
}
cout << " The smallest number you entered was " << smallest << endl;
cout << " The largest number you entered was " << largest << endl;
return 0;
}
您正在面临问题,因为当用户输入-99时,您也将其存储在smallest
中。尝试下面的代码,仅在较小的和的情况下覆盖数字,如果不是-99
// Evaluate user input
if (number < smallest && number != -99)
{
smallest = number;
}