c++ - 在 txt 文件中查找最小和最大数字

标签 c++ c++11 c++14

引用下图:

pic1

我在查找 .txt 文件中的最小值和最大值时遇到问题。 该数字作为每行一个数字存储在文件中。程序应该遍历这些数字并找到最大和最小的数字。

更新:我解决了这个问题,但由于数字类型,我面临另一个问题。 假设我有以下数字: 0005.00 0005.23 52340.53 0000.01 0111.10 0001.00 2523.00

我怎样才能得到正确的答案?

#include<fstream>
#include<cstdlib>
#include<iostream>
#include <iomanip>
using namespace std;

int main()
{
int counter=0, number;
float  sum = 0, average=0;
char file_name [20];
cout << "enter filename: ";
cin >> file_name;
ifstream input;
input.open(file_name);
if (! input)
{
cout << "Can't open file" << file_name;
//exit (0);
}

input  >> number;
float min = number;
float max = number;

while (input>>number)
{
counter++;
sum=sum+number;
// Now, we can also check for Min/Max...
if (number > max) max = number;
if (number < min) min = number;
}
average=sum/counter;

cout<< fixed<<cout.precision(3);
cout<< "The average file in file test is was "<<average<<endl;
cout<< fixed<<cout.precision(3);
cout<<"The largest number is: "<<max<<endl;
cout<< fixed<<cout.precision(3);
cout<<"The smallest number is: "<<min<<endl;
input.close();
return 0;
}

当我运行它时,最小值和最大值为零!感谢您的帮助。

最佳答案

您的第一个 while 循环将读取到文件末尾;因此,您的第二个 while 循环实际上不会读取任何内容 - 在它开始之前您已经在文件的末尾。

您应该将第二个循环的“主体”代码合并到第一个循环中,并删除“冗余”的第二个循环。您还以错误的方式分配了 MinMax 变量:

while (input>>number)
{
    counter++;
    sum=sum+number;
    // Now, we can also check for Min/Max...
    if (number > Max)
        Max = number;
    if (number < Min)
        Min = number;
}
average = sum / counter;

你还应该给你的 MinMax 更好的初始值(除非你知道数据中会有正数和负数):

float number, sum = 0, average, Max = -FLT_MAX, Min = FLT_MAX;

随时要求进一步澄清和/或解释。

关于c++ - 在 txt 文件中查找最小和最大数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62555676/

相关文章:

c++ - 在 STL vector 中存储对象 - 最少的方法集

C++ 无法选择正确的部分模板特化

c++ - 从临时成员中删除成员时省略复制/移动

c++ - 遍历二叉搜索树

java - 你能在 C++ 中使用 Java Swing 吗?

c++ - Lambda:一个可能悬垂的引用捕获

c++ - 如何使用 GLFW 预编译二进制文件编译 Visual Studio 2019 发布版本

c++ - 初始化结构体中的数组变量

c++ - 为什么 pcre regex 比 c++11 regex 快得多

c++ - 允许模拟类继承自最终类