读取空格,浮点值在C中逐行分隔

问题描述 投票:0回答:1

我被赋予从C中的data.txt文件读取以空格分隔的浮点值的任务。

文件看起来像这样...

0.329412 0.800000 0.800000 0.290196
0.329412 0.800000 0.800000 0.290196 
0.329412 0.800000 0.800000 0.290196
0.329412 0.800000 0.800000 0.290196 
0.796078 0.800000 0.800000 0.796078 
0.796078 0.800000 0.800000 0.796078 
0.796078 0.800000 0.800000 0.796078 
0.796078 0.800000 0.800000 0.796078 
0.796078 0.800000 0.800000 0.796078 
0.796078 0.800000 0.800000 0.796078 
0.329412 0.800000 0.800000 0.290196 
0.329412 0.800000 0.800000 0.290196 
0.329412 0.800000 0.800000 0.290196 
0.329412 0.800000 0.800000 0.290196 
0.329412 0.800000 0.800000 0.290196 

中间两行是恒定的。任务是查找第一行和第四行何时都在0.7或更高的范围内并保持计数。这只是文件的一部分,但在某些时候它们会高于0.7,因此计数会增加一个。实际文件有数千行,但只有四列。

我已经这样尝试过:

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

int main()
{
  float arr[4000][4];
  int i, j, vals =0, count = 0;

  FILE *fpointer;
  char filename[10];
  printf("Enter the name of the file to be read: ");
  scanf("%s",filename);
  fpointer = fopen(filename, "r");
  if (fpointer == NULL)
  {
    printf("Cannot open file \n");
    exit(1);
  }

  while(!feof(fpointer))
  {
    for(i=0; i<4000; i++)
    {
        for(j=0; j<4; j++)
        {
            fscanf(fpointer, " %f ", &arr[i][j]);
        }

        if (arr[i][0] >= 0.7 && arr[i][3] >= 0.7)
            vals += 1;
        else if (arr[i-1][0] >= 0.7 && arr[i-1][3] >= 0.7)
            count += 1;
    }
   }

  printf("number of counts: %d", count);

  fclose(fpointer);
}

但是我被告知要逐行读取文件,然后评估而不是存储到大数组中,因为程序可能会崩溃如果文件很大。

您能协助我这样做吗?我有类似的大文件,我不确定它们有多少行。

请让我知道如何逐行读取值并同时对其进行评估。

谢谢你。

c file-handling
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.