使用fscanf计算文本文件中的整数数量

时间:2018-01-30 19:26:08

标签: c file scanf

例如,我有一个包含所有整数的txt文件。我想计算有多少整数来分配一个数组。

int array[0];
int count = 0;
FILE *file = fopen("file1.txt","r");
while(fscanf(file,"%d",&array[count])==1){
  count++;
}
printf("%d",count);

目前有错误消息,不会通过。这是fscanf的工作方式吗?

3 个答案:

答案 0 :(得分:2)

您无法创建大小为0的数组。如果您只想计算整数的数量,请不要使用数组,而只能使用临时变量。 最好检查一下您是否正确打开文件并关闭文件。

#include <stdio.h>

int main(){
  int temp;
  int count = 0;
  FILE *file = fopen("file1.txt","r");
  if(file == NULL){
    printf("Could not open specified file");
    return -1;
  }
  while(fscanf(file,"%d",&temp)==1){
    count++;
  }
  fclose(file);
  printf("%d",count);
  }

  return 0;
}

如果您还想存储值供以后使用,您可以例如读取文件两次,第一次计算整数的数量,然后使用此数量来声明所需的数组。在第二次运行之前,重要的是回放文件指针,从头开始读取文件。

#include <stdio.h>

int main(){
  int temp;
  int count = 0;
  FILE *file = fopen("file1.txt","r");
  if(file == NULL){
    printf("Could not open specified file");
    return -1;
  }
  while(fscanf(file,"%d",&temp)==1){
    count++;
  }

  printf("%d",count);

  if(count == 0){  //do not create array of size 0
    fclose(file);
  }
  else{
    //second run
    int array[count];
    rewind(file);
    for(int i=0; i<count; i++){
      fscanf(file,"%d",&array[count]);
    }
    fclose(file);

    //continue using array...
  }

  return 0;
}

答案 1 :(得分:0)

int array[0]; 

fscanf(file,"%d",&array[count])

会导致分段错误,因为您正在越过边界访问数组。

如果您需要灵活的阵列,则需要

  • int *array
  • 用于存储fscanf
  • 中每个号码的占位符 每次找到新号码时都会
  • realloc数组并将数字添加到数组中。

答案 2 :(得分:0)

#include <stdio.h>

#define isDigit(c) ('0' <= (c) && (c) <= '9') ? 1 : 0

int main() {
    FILE *fd;
    int counter, c, tmp;
    if ((fd = fopen("PathToFile", "r")) != NULL){
        do{
            c = getc(fd);
            if (isDigit(c)) tmp = 1;
            else if (tmp == 1 && !isDigit(c)){
            counter++, tmp = 0;
            }
        }while (c != EOF);
    }else{
        printf("Couldn't find File!");
        return 1;
    }
    fclose(fd);
    printf("%i", counter);
    return 0;
}