c++ - 在 txt 文件中查找最小和最大数字
问题描述
请参阅下面的照片以供参考:
我在 .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
循环实际上不会读取任何内容 - 在文件开始之前您已经在文件的末尾。
您应该将作为第二个循环的“主体”的代码合并到第一个循环中,并删除该“冗余”第二个循环。您还以错误的方式分配Min
andMax
变量:
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;
您还应该给出Min
更好的Max
初始值(除非您知道数据中会有正数和负数):
float number, sum = 0, average, Max = -FLT_MAX, Min = FLT_MAX;
随时要求进一步澄清和/或解释。
推荐阅读
- arrays - 从 Core Data 中的每个实体中仅选择“名称”作为 Array Swift 4
- coordinates - ATOC 主站文件“Eastings”和“Northings”的格式是什么?
- javascript - 如何在运行时替换特定图像(分层)(可能在某些操作上,如点击)
- java - 如何使用viewmodel在arraylist中获得位置?
- ruby-on-rails - 除非刷新浏览器,否则对象不会更新 - 原因是 Turbolink?
- javascript - 将图像绘制到 Canvas 并通过 base64 对其进行编码
- php - 将十六进制字符串转换为浮点数
- java - 如何根据班级从列表中获取项目?
- javascript - 空手道特征文件中的 String.split() 返回异常
- elasticsearch - Elastic-Search count 两个字段时间差的聚合