C程序计数文本文件中的行与目录扫描不兼容?

时间:2018-01-10 18:23:51

标签: c file text directory lines

我试图从目录中的多个文本文件中读取变量。当我运行代码时,在我尝试读取每个文本文件中的行数后会出现故障。

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

int main()
{

  DIR *ptr;
  double variable;
  int n, i;
  FILE *f;
  char ch1;

  n=0;
  i=0;

  struct dirent *directory;
  ptr = opendir("faketext");
  while((directory = readdir(ptr)) != NULL)
  {
    if ( !strcmp(directory->d_name, ".") || !strcmp(directory->d_name, "..") )
    {

    } else {
      n++;
    }
  }

  rewinddir(ptr);

  char *filesList[n];

  //Put file names into the array
  while((directory = readdir(ptr)) != NULL) {
    if ( !strcmp(directory->d_name, ".") || !strcmp(directory->d_name, "..") )
    {}
    else {
      filesList[i] = (char*) malloc (strlen(directory->d_name)+1);
      strncpy (filesList[i],directory->d_name, strlen(directory->d_name) );
      i++;
    }
  }
  closedir(ptr);

  int filt_len[n];

  for(i=0; i<n; i++){
    char buf[0x100];
    snprintf(buf, sizeof(buf), "faketext/%s", filesList[i]);
    f = fopen(buf, "r");
    if(f == NULL){
      printf("Trouble opening file.");
    }

    for (ch1 = getc(f); ch1 != EOF; ch1 = getc(f)){
      if (ch1 == '\n')
        filt_len[i] = filt_len[i] + 1;
    }

    fscanf(f, "%lf", &variable);
    printf("%f\t%d\n",variable, filt_len[i]);
    fclose(f);
  }

  return 0;

}

如果我不包括行计数功能,这个程序可以完美运行。并且线计数功能在该程序之外运行良好 - 我已经多次使用它以取得巨大成功。

我目前正在运行程序,其中包含四个测试文本文件,每个文件中包含两个或三个变量。输出应该是每个文本文件中的第一个变量(非零十进制),后跟数字2或3.

当我运行程序时,这是输出:

0.000000 14

0.000000 35

0.000000 17

0.000000 4199674

有没有人对为什么这不起作用有任何想法?我不明白为什么这两个功能可以单独工作但不能一起工作。

(C新手和自学成才。)

0 个答案:

没有答案