矢量的最小值显示为 0
Minimum value of vector displays as 0
我正在尝试显示向量的最大值和最小值(以及其他内容)。最大值显示正常,但最小值始终显示为 0。唯一一次它不是 0 时,它最终会显示数据列表的最终值。
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main()
{
fstream file;
file.open("dataWin.txt");
vector<float> dist;
while(file.eof() == false)
{
string miles;
getline(file, miles);
float milesNum = atof(miles.c_str());
dist.push_back(milesNum);
}
float max = 0.0;
float min = 1.0;
float sum = 0.0;
float secHour = 3600;
float lastRecord = 238857;
for(int i = 0; i < dist.size(); i++)
{
if(dist[i] < min)
min = dist[i];
if(dist[i] > max)
max = dist[i];
sum += dist[i];
}
float avg = (float)sum / dist.size();
float lastSeconds = (float)lastRecord / (float)avg;
float deadline = (float)lastSeconds / (float)secHour;
cout << "National Aeronautics and Space Administration - NASA" << endl;
cout << "EYES ONLY" << endl << endl;
cout << "Statistics on solar object 326 Alba" << endl;
cout << "Danger level: HIGH" << endl << endl;
cout << "Maximum travel distance: " << max << " miles per second." << endl;
cout << "Minimum travel distance: " << min << " miles per second." << endl;
cout << "Average travel distance: " << avg << " miles per second." << endl << endl;
cout << "WARNING! OBJECT 326 Alba WILL IMPACT IN " << deadline << " HOURS!" << endl;
file.close();
return 0;
}
如何获取要显示的列表的实际最小值?
问题是当输入结束时,getline
调用将失败并且不会更新字符串,然后将空字符串转换为在atof
调用中失败的浮点数(如果atof
失败,它将返回0.0
),并将该值推入向量。向量中的最小值现在已0
,并且算法正确地将其生成为最小值。
如果你打算用C++编写代码,并假设输入的唯一内容是浮点数和空格,你可以通过直接读入浮点数来简化代码:
float miles;
while ( std::cin >> miles ) {
dist.push_back( miles );
}
更简单的是,您可以通过使用 STL 中的迭代器和算法来完全避免循环:
std::vector<float> dist;
std::copy( std::istream_iterator<float>( std::cin ), std::istream_iterator<float>(),
std::back_inserter( dist ) );
std::cout << "Max: " << *std::max_element( dist.begin(), dist.end() ) << "n";
std::cout << "Min: " << *std::min_element( dist.begin(), dist.end() ) << "n";
std::cout << "Sum: " << std::accumulate( dist.begin(), dist.end() ) << std::endl;
这只是为了展示使用现有算法可以做什么。在您的特定情况下,我会使用 std::copy
和 std::istream_iterator
s 来读取输入,但为了处理已经读取的数字,我会展开一个手动循环(以便所有最小值、最大值和总和都可以在一次传递中计算,上面的 STL 示例在三次传递中完成)。
这个:
while(file.eof() == false)
{
string miles;
getline(file, miles);
应该是:
string miles;
while( getline(file, miles) )
{
你从哪里开始需要调用 eof() 的想法?你没有,以你的方式这样做是错误的!
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 使用递归的数组的最小值.这是怎么回事
- 如何创建一个函数来计算并返回平均值、最大值和最小值
- 在二维数组中查找最小值和最大值?
- 有没有办法使用递归函数找到数组中最小值的 INDEX?C++
- 程序以使用 C++ 中的 while 循环查找一组数字的最小值
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- C++ 函数,用于查找传入的 N 个数字的平均值、总和、最小值和最大值
- txt 文件中浮点数的最大和最小值
- 余数运算符的等效操作,用于处理低于允许的最小值
- 需要使用模板查找数组的第二个最小和最小值
- CUDA - 将 float3 数组的 (x,y,z) 分量的最小值/最大值分开?
- 查找包含 N 个元素的数组的最小值和最大值
- 显示将来自用户输入的数组的最小值和最大值
- 如何显示从文件中读取的整数的最小值和最大值
- 在C++中,我需要创建一个程序,该程序在输入某个数字时循环并停止,然后显示最大值和最小值
- Q滑块显示最小值、最大值和当前值
- 在数组中显示最小值
- 矢量的最小值显示为 0
- 我的最小值和最大值在数组函数中显示的不是最大值和最小值