如何编写从文本文件中读取数组并找到max和min的程序?

时间:2017-11-06 10:00:08

标签: c arrays file-io io format

我的任务是编写一个代码,从txt文件数组中读取数字并查找max,min,sum等。(200)数字的格式如下: 3.23 19.398 98.73 2.1 ... 对不起,如果代码有点混乱,我一直试图拼凑很多不同的教程无济于事。我基本上需要知道如何让代码顺序读取值,并拉出最大/最小值并继续通过数组。 (并找到一路上的总和)如何正确格式化?

<svg class="social-icon" style="width:24px;height:24px" viewBox="0 0 24 24">
  <path d="M17.71,9.33C18.19,8.93 18.75,8.45 19,7.92C18.59,8.13 18.1,8.26 17.56,8.33C18.06,7.97 18.47,7.5 18.68,6.86C18.16,7.14 17.63,7.38 16.97,7.5C15.42,5.63 11.71,7.15 12.37,9.95C9.76,9.79 8.17,8.61 6.85,7.16C6.1,8.38 6.75,10.23 7.64,10.74C7.18,10.71 6.83,10.57 6.5,10.41C6.54,11.95 7.39,12.69 8.58,13.09C8.22,13.16 7.82,13.18 7.44,13.12C7.81,14.19 8.58,14.86 9.9,15C9,15.76 7.34,16.29 6,16.08C7.15,16.81 8.46,17.39 10.28,17.31C14.69,17.11 17.64,13.95 17.71,9.33M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2Z" />
</svg>

我将非常感谢任何帮助,我已经尝试利用所有可能的资源(youtube,其他stackoverflow问题)几个小时,但没有明确规定如何格式化数组中的调用,读取和从中获取值。

2 个答案:

答案 0 :(得分:1)

有很多问题:

你可能想要这个:

#include <stdio.h>
#include <stdlib.h>                   // include also stdlib.h

int main()
{
  float newnum;
  float max = 0, min = 99999999999;   // use float type for float numbers
  int i = 0;    
  FILE *fpdata;     // callign fopen only once

  if ((fpdata = fopen("data.txt", "r")) == 0)
  {
    printf("File not found.  Abort!");
    exit(-1);
  }

  while (fscanf(fpdata, "%f", &newnum) != EOF) {    // removed extra ;
    printf("i = %d, newnum = %f\n", i++, newnum);   // reading into newnum 
                                                    // correct format specifiers

    if (newnum > max)
      max = newnum;

    if (newnum < min)
      min = newnum;
  }

  printf("The largest number is %f\n", max);  // correct format specifiers
  printf("The smallest number is %f\n", min);
  fclose(fpdata);

  return 0;
}

但仍有提升空间。

这是首先将所有数据读入data数组的版本(data是一个比y更好的名称)然后进行计算:

#include <stdio.h>
#include <stdlib.h>

int main()
{
  float max = 0, min = 99999999999;
  float data[200];

  FILE *fpdata;

  if ((fpdata = fopen("input1.txt", "r")) == 0)
  {
    printf("File not found.  Abort!");
    exit(-1);
  }

  int nbofnumbers = 0;
  while (fscanf(fpdata, "%f", &data[nbofnumbers]) != EOF)
  {
    nbofnumbers++;
  }

  for (int i = 0; i < nbofnumbers; i++)
  {
    printf("data[%d] = %f\n", i, data[i]);
    if (data[i] > max)
      max = data[i];

    if (data[i] < min)
      min = data[i];
  }

  printf("The largest number is %f\n", max);
  printf("The smallest number is %f\n", min);
  fclose(fpdata);

  return 0;
}

答案 1 :(得分:0)

您的代码存在一些问题:

  • 您扫描float但将数据存储为int
  • open两次文件
  • ;
  • 末尾有一个非预期的while
  • 循环条件(即!= EOF)可能导致文件中的无限循环包含无法解析为浮点数的内容。使用== 1更安全。
  • 可以改进max和min的初始化

确定程序可能是:

#include <stdio.h>
#include <stdlib.h>
#include <float.h>

int main(void) 
{
  float newnum;
  float max = -FLT_MAX;
  float min = FLT_MAX;

  FILE *fpdata;
  if((fpdata = fopen("data.txt", "r")) == 0)
  {
    printf("File not found.  Abort!");
    exit(-1);
  }

  while(fscanf(fpdata,"%f", &newnum) == 1)
  {
    printf("%f\n", newnum);
    if(newnum > max) max = newnum;
    if(newnum < min) min = newnum;
  }

  printf("The largest number is %f\n", max);
  printf("The smallest number is %f\n", min);
  fclose(fpdata);

  return 0;
}