c - 如何编写一个从文本文件读取数组并找到最大值和最小值的程序?

标签 c arrays file-io io format

我的任务是编写一段代码,从 txt 文件数组中读取数字并查找最大值、最小值、总和等。(200)个数字的格式如下: 3.23 19.398 98.73 2.1 ... 抱歉,如果代码有点困惑,我一直在尝试拼凑很多不同的教程,但无济于事。我基本上需要知道如何让代码按顺序读取值,并提取最大/最小值并继续遍历数组。 (并一路求和)我如何正确格式化它?

# include <stdio.h>


int main()
{
    //char data[200];
int newnum;
int max = 0, min = 99999999999;
int i = 0;
int y[200];
//min=max=newnum;

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


    while(fscanf(fpdata,"%f", &y[i++]) != EOF);{
    //for(i=0; i < 200; i++)

        i--;
        printf("i=%d \n", i);
        //printf("\n%d%d\n", &y[i++], y);
        if(newnum > max)
        max = newnum;

        if(newnum < min)
        min = newnum;
    }


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


    return 0;
}

任何帮助将不胜感激,我已经尝试利用所有可能的资源(youtube,其他 stackoverflow 问题)几个小时,但没有明确说明如何从文件中格式化数组中的调用,读取并从中提取值。

最佳答案

有很多问题:

您可能想要这个:

#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;
}

关于c - 如何编写一个从文本文件读取数组并找到最大值和最小值的程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47134225/

相关文章:

c - 为什么当我硬编码它时 ls 与 execvp 可以工作,但是当我通过输入读入它时它就不起作用

c - 带有长信号处理程序的定时器问题 (SIGALARM)

arrays - 在 shell 脚本中连接数组以创建备份文件路径

c - 用 c 解析 csv

php - 使用 jQuery AJAX 将 JSON 对象传递给 PHP

arrays - 奇怪的golang“append ”行为(覆盖 slice 中的值)

c++ - 如何使用 STL 在 C++ 中创建游戏保存文件格式

java - Files#write 不适用于 byte[] 和字符集

C# 提高程序效率?

c - Codechef 提交中出现段错误