使用textfile中的数据填充数组

时间:2017-09-08 13:35:50

标签: c

我有一个包含双数据的.txt文件。每个都在一个新的行。 我将要从文件中读取两次 - 一个用于计算文件的数量,另外两个用数据填充数组。所以我这样做了:

#include <stdio.h>

char name[30];
scanf ("%s", name);

FILE *file = fopen (name, "r");
if (!file) 
{
    printf ("Cannot read from file %s!\n", name);
    return 1;
}

double results;
int size = 0;
while ( fscanf (plik, "%lf", &results) != EOF)
{
    size++;
}
//and here I have how many numbers is in the file

double numbers[size]; 
for (int i=0; i<size; i++)
{
    fscanf (plik, "%lf\n", &numbers[i]);

}   
for(int i = 0; i < size; i++)
{
    printf("%lf\n" , numbers[i]);
}

但它没有用 - 结果只有0.000000,数量为6510(这么多)。任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

正如Chris所指出的,当你在第一遍中读取文件时,fscanf会移动文件指针。因此,你不会在第二次通过中阅读任何内容。我假设所有代码都在main函数中,而plik只是从file复制的另一个标识符。使用fseek(file, 0, SEEK_SET)将文件指针重置为文件的开头似乎解决了我的问题:

#include <stdio.h>

int main() {
  char name[30];
  scanf ("%s", name);

  FILE *file = fopen (name, "r");
  if (!file) 
    {
      printf ("Cannot read from file %s!\n", name);
      return 1;
    }

  double results;
  int size = 0;
  FILE *pFilePtr = file;
  printf("file = %p\n", file);
  while ( fscanf (pFilePtr, "%lf", &results) != EOF) 
      size++;
  printf("size : %d\n", size);

  double numbers[size]; 
  fseek(file, 0, SEEK_SET);
  FILE *plik = file;
  for (int i=0; i<size; i++)
      fscanf (plik, "%lf", &numbers[i]);
  for(int i = 0; i < size; i++)
      printf("%lf\n" , numbers[i]);
  return 0;
}

我假设这个文件输入运行它:

~/Documents/src : $ cat testFile.txt 
1.2334 2.223 3.34 4.21 5.34 6.23
~/Documents/src : $ g++ testFillArr.c
~/Documents/src : $ ./a.out 
testFile.txt    
file = 0x559494bdd420
size : 6
1.233400
2.223000
3.340000
4.210000
5.340000
6.230000