程序正在从文件中读取最大的数字,但不是最小的
Posted
技术标签:
【中文标题】程序正在从文件中读取最大的数字,但不是最小的【英文标题】:Program is reading the largest number from a file, but not the smallest 【发布时间】:2019-10-14 19:52:45 【问题描述】:我正在编写一个程序,该程序从输入文件中读取整数,并使用 while 循环找到最小和最大的数字并将其输出。我的输出文件成功显示它找到了最大的数字,但它说最小的数字是 0,即使在我的输入文件中最小的数字是 11。这是我的代码:
#include <fstream>
#include <string>
#include <iomanip>
#include <iostream>
using namespace std;
int main()
fstream instream;
instream.open("lab7_input.txt");
ofstream outstream;
outstream.open("lab7_output.txt");
int next, largest, smallest;
largest = 0;
smallest = 0;
while (instream >> next)
if (largest < next)
largest = next;
if (smallest > next)
smallest = next;
outstream << "The largest number is: " << largest << endl;
outstream << "The smallest number is: " << smallest << endl;
instream.close();
outstream.close();
return 0;
【问题讨论】:
初始化最小到一个较大的值,也许,或者输入值 您将smallest
初始化为 0,因此除非您的文件中有负数,否则 0 将始终较小。您可以改为将其初始化为 std::numeric_limits<int>::max()
以避免这种情况。
如何将最小值初始化为它可以容纳的最大值?
我很确定这与我昨天看到的一个问题相同。
将smallest = 0
行设置为一个大于我从工作文件中读取的所有其他数字的数字。谢谢大家!我做了smallest 999;
【参考方案1】:
这是你的问题:smallest = 0;
在测试最小值/最大值时,请尝试将您的 min
或 max
变量初始化为它们的另一端。使用INT_MIN
和INT_MAX
来执行此操作。试试这个:
#include <climits>
...
int next, largest, smallest;
largest = INT_MIN;
smallest = INT_MAX;
现在,无论您的数字集中是什么,都可以确保您的程序具有最大/最小值。
【讨论】:
没问题!如果您认为您的问题已得到解答,请务必接受其中一个回复。【参考方案2】:我建议将最大和最小设置为第一个读取的值:
instream >> largest;
smallest = largest;
while (instream >> next)
//...
这允许您的答案指定给定数字集中的最大和最小。设置为数字限制,不指定集合内的数字。
【讨论】:
【参考方案3】:if(smallest > next) 但如果 minimum 为 0 它永远不会大于 next 所以它总是坚持为零, 使程序运行 set minimum = 99999999 // 开头的高数
【讨论】:
@AndriNic "set minimum = 99999999" 如果最小的数字是999999999
会怎样?最好设置为std::numeric_limits<int>::max()
。
我建议不要使用numeric_limits<T>::max()
,而是确保容器不为空并简单地设置T min = elements[0]
。
@Habitate "我建议不要使用numeric_limits<T>::max()
" 有什么理由吗? “而不是确保容器不为空并简单地设置T min = elements[0]
。” 什么容器? OP 正在从流中读取这些元素。 if
语句不会检查它是否是第一个读取的元素,比仅仅正确初始化值更麻烦吗?
@AlgirdasPreidžius,我说的是在容器内查找最小值的一般方法(这也可以通过使用流迭代器来实现)。但是,我认为在循环之前执行 stream >> smallest
没有任何问题。
@Habitate 1) "我看不出任何问题,只是在循环之前做流>>最小。" 如果stream
为空怎么办? 2) 你仍然没有回答为什么你会反对numeric_limits<T>::max()
的问题?任何没有推理的建议都是毫无价值的。以上是关于程序正在从文件中读取最大的数字,但不是最小的的主要内容,如果未能解决你的问题,请参考以下文章
用Android Studio 手动输入的数字中找出最大和最小的数字