程序正在从文件中读取最大的数字,但不是最小的

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&lt;int&gt;::max() 以避免这种情况。 如何将最小值初始化为它可以容纳的最大值? 我很确定这与我昨天看到的一个问题相同。 smallest = 0 行设置为一个大于我从工作文件中读取的所有其他数字的数字。谢谢大家!我做了smallest 999; 【参考方案1】:

这是你的问题:smallest = 0;

在测试最小值/最大值时,请尝试将您的 minmax 变量初始化为它们的另一端。使用INT_MININT_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&lt;int&gt;::max() 我建议不要使用numeric_limits&lt;T&gt;::max(),而是确保容器不为空并简单地设置T min = elements[0] @Habitate "我建议不要使用numeric_limits&lt;T&gt;::max()" 有什么理由吗? “而不是确保容器不为空并简单地设置T min = elements[0]” 什么容器? OP 正在从流中读取这些元素。 if 语句不会检查它是否是第一个读取的元素,比仅仅正确初始化值更麻烦吗? @AlgirdasPreidžius,我说的是在容器内查找最小值的一般方法(这也可以通过使用流迭代器来实现)。但是,我认为在循环之前执行 stream &gt;&gt; smallest 没有任何问题。 @Habitate 1) "我看不出任何问题,只是在循环之前做流>>最小。" 如果stream 为空怎么办? 2) 你仍然没有回答为什么你会反对numeric_limits&lt;T&gt;::max() 的问题?任何没有推理的建议都是毫无价值的。

以上是关于程序正在从文件中读取最大的数字,但不是最小的的主要内容,如果未能解决你的问题,请参考以下文章

为什么从我的文件中读取的最小数字始终为0? (JAVA)

用Android Studio 手动输入的数字中找出最大和最小的数字

如何从数组中的数字中找到最大和最小数字[重复]

C 冒泡排序最大的值变成0

计算用户在Java中输入的一系列数字的总和、算术平均值、最小值和最大值? [关闭]

如何在文件处理中从文本文件中找到每一行的最小值和最大值?