从C++的用户输入中查找最小值

Finding the minumum value out of user inputs in C++

本文关键字:查找 最小值 输入 用户 C++      更新时间:2023-10-16

我的问题是从用户定义的输入数量中找到最小值。到目前为止,一切都很好,除此之外。每次我尝试重新排列一些代码或尝试新方法时,我都会在屏幕上获得相同的输出:

Sum of numbers entered is:      145.4
Average of numbers entered is:  24.2333
The Highest number entered was: 45
The Lowest number entered was:  6.95283e-310

我每次都得到这个,无论输入什么,或者我尝试什么不同的建议:

The Lowest number entered was:  6.95283e-310

我知道数组的使用和实现。但是,我正在做的作业甚至还没有涵盖数组。那是后面的几章。请不要建议数组...

我看过这里:

通过用户输入查找 C++ 中的最大值和最小值 没用

http://www.cplusplus.com/forum/beginner/38799/没用

更改最大值/最小值也不起作用

#include <iostream>
using namespace std;
int main() 
{
double number, numberitems, sum = 0, average, max, min;
cout << "Enter number of items: n";
cin >> numberitems;
//Make sure user can not enter negatives
if ( numberitems < 0 ) {
//no request to perform sum
std::cout << "I said not to enter a negative number... 'n";
std::cin.clear(); //clear bad input flag
return 1;
}
//Get the user's values
for (int i = 0; i < numberitems; i++)
{
std::cout << "Enter any NON-negative number: ";
std::cin >> number; 
std::cout << 'n';

//Maximum value entered
if (number > max) {
max = number;
}
//minimum value entered
if (number < min) {
min = number;
}
//Make sure user can not enter negatives
if ( number < 0 ) {
//no request to perform sum
std::cout << "I said not to enter a negative number... 'n";
std::cin.clear(); //clear bad input flag
return 1;
}
//Sum of all the numbers
sum = sum + number;
//Average of all the numbers
average = sum / numberitems;

}
std::cout << endl;
std::cout << endl;
std::cout << "Sum of numbers entered is:      " << sum << 'n';
std::cout << "Average of numbers entered is:  " << average <<'n';
std::cout << "The Highest number entered was: " << max <<'n';
std::cout << "The Lowest number entered was:  " << min <<'n';
return 0;
}

进行了临时修复:3

double min = 99999999999999999999999999999999999999999999999;

我对此很陌生。

更新

阅读更多评论后,我发现我错过了<cfloat>。使用#include <cfloat>NOW每个人的建议都可以在上面工作。然而,课堂上根本没有涉及<cfloat>。所以我不确定这在这里是否可用?

#include <iostream>
#include <cfloat>
using namespace std;
int main()
{
int numberitems;
double number, sum = 0, average;
double max = 0;
double min = DBL_MAX;
cout << "Enter number of items: n";
cin >> numberitems;
//Make sure user can not enter negatives
if ( numberitems < 0 ) {
//no request to perform sum
std::cout << "I said not to enter a negative number... 'n";
std::cin.clear(); //clear bad input flag
return 1;
}
//Get the user's values
for (int i = 0; i < numberitems; i++)
{
std::cout << "Enter any NON-negative number: ";
std::cin >> number;
std::cout << 'n';

//Maximum value entered
if (number >= max) {
max = number;
}
//minimum value entered
if (number <= min) {
min = number;
}
//Make sure user can not enter negatives
if ( number < 0 ) {
std::cout << "I said not to enter a negative number...'n";
std::cin.clear(); //clear bad input flag
return 1;
}
//Sum of all the numbers
sum = sum + number;
//Average of all the numbers
average = sum / numberitems;
}
//Print the results
// some cosmetic...
std::cout << endl;
std::cout << endl;
std::cout << "n=================REPORT====================n";
std::cout << 'n';
std::cout << "tYour TotalstValuesn";
std::cout << "t-----------t------n";
std::cout << "t    Sum:        " << sum << 'n';
std::cout << "t  Average:      " << average <<'n';
std::cout << "t  Highest:      " << max <<'n';
std::cout << "t   Lowest:      " << min <<'n';
return 0;
}

同样,<cfloat>工作正常,但我不确定是否允许我使用它。还有什么其他方法可以解决这个问题?

这个问题已经得到了很好的答案 - 很快:最小值和最大值初始化

然而

以上是非常具体的。 当然,在这种特定情况下它会有所帮助,但我觉得需要一个更广泛的建议,可以在这里和许多其他情况下工作。

添加打印输出

在这种情况下,将调试打印输出添加到代码("不使用调试器进行调试"(总是很有帮助的。

例如,在示例中添加以下内容可能会有所帮助:

//Get the user's values
for (int i = 0; i < numberitems; i++)
{
std::cout << "Enter any NON-negative number: ";
std::cin >> number; 
std::cout << 'n';

//Maximum value entered
if (number > max) {
// debug - (remove before submission)
std::cout << "number is the new max! number = " << number
<< ", max = " << max << std::endl;
// end of debug
max = number;
}
//minimum value entered
if (number < min) {
// (debug - remove before submission)
std::cout << "number is the new min! number = " << number 
<< ", min = " << min << std::endl;
// end of debug
min = number;
}

计算最小值和最大值时,应将变量初始化为默认值。对于最小值,它是最大可能值;最大 - 最小可能的一个。

double max, min; // BUG - not initialized
#include <float.h> // or <cfloat>
...
double max = 0; // CORRECT - initialized
double min = DBL_MAX; // CORRECT - initialized

对于最大值,初始化通常是-DBL_MAX(注意:不是DBL_MIN(,但在这种情况下,当不存在负值时,0 就足够了。

您需要为minmax设置一个初始值。对于min,我建议使用初始值DBL_MAX,该值在标头cfloat中定义。