【发布时间】:2019-10-05 18:32:10
【问题描述】:
我的问题是从用户定义的输入数量中找到最小值。到目前为止,一切都很好,除了那个。每次我尝试重新排列一些代码或尝试一种新方法时,我都会在屏幕上不断得到相同的输出:
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
我知道数组的使用和实现。但是,我正在做的任务甚至还没有涵盖数组。那是后面的一些章节。请不要推荐数组...
我看过这里:
Finding Maximum and Minimum values in c++ by user input 没用
http://www.cplusplus.com/forum/beginner/38799/ 没用
更改 max/min 的值也不起作用
#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;
我对此很陌生。
更新
阅读更多 cmets 后,我发现我错过了 <cfloat>。使用#include <cfloat> 现在每个人的上述建议都有效。然而,<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 Totals\tValues\n";
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> 工作正常,但我不确定我是否可以使用它。还有什么其他方法可以解决这个问题?
【问题讨论】:
-
例如,
min和max在哪里设置起始值? -
为什么不直接把输入放到
std::vector这样的容器中,然后在上面使用std::accumulate()和std::minmax_element()这样的标准算法呢? -
double numberitems;-- 为什么这是double?您对输入进行了很多检查,除了我可以为numberitems输入“2.4”,这看起来很奇怪。 -
@Bathsheba 我最初给了他们价值。 Max 为 0,Min 为(无论如何),max 会改变,min 不会。这就是我在这里的原因:/
-
@RemyLebeau 这只是 C++ Programming 1 的第 6 章作业。我不知道那些是什么......
标签: c++