请看图片,我有问题,在寻找最小和最大的数字在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
和max
变量:
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;
请随时要求进一步的澄清和/或解释。
此循环读取文件中的所有数字:
while (input>>number)
{
counter++;
sum=sum+number;
}
在那个循环之后,input
已经在文件的末尾,下一个循环将不会读取任何数字。
读取一次数字,并在一个循环中进行所有处理。 或者,将数字存储在std::vector
中,然后进行处理。
此外,您从不修改代码中的min
和max
。 这个循环是什么:
while (input>>number)
{
if (number>Max)
number=Max;
else
number=Min;
}
代之以剪辑数字,使任何大于0
(max
)的数字设置为0
,任何其他数字设置为0
(min
)。
你可能想要一些类似于
double number;
input >> number;
double min = number;
double max = number;
while ( input >> number) {
if (number > max) max = number;
if (number < min) min = number;
}
我使用第一个数字初始化min
和max
。 如果不这样做,则0
不是min
和max
的良好初始值,但是可以使用std::numerical_limits
作为max
的初始值,使用std::numerial_limits
作为min
的初始值。