fgetc()在函数中无法正常工作

时间:2018-12-03 22:16:09

标签: c file io

我正在尝试使用fgetc()函数逐个字符地读取文本文件,但是不显示任何输出。这是一个学校项目,它仍然以非常非常简单的方式来测试程序的功能。

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

void fn1(FILE *f);
void fn9(FILE *fp, char, char);

int main() {
  FILE *fp = fopen("text.txt", "r");
  if (fp == NULL) {
    perror("Error: ");
    exit(1);
  }
  fn1(fp);
  fn9(fp, '0', '9');

  fclose(fp);
  return 0;
}

void fn1(FILE *f) {
  int num, sum = 0, count = 0;

  while (fscanf(f, "%d", &num) == 1) {
    if (num > 0) {
      sum += num;
      count++;
    }
  }
  printf("the avg of positive nums is %.2f", (float) sum / count);
}

void fn9(FILE *fp, char m, char n) {
  int ch;
  int count1 = 0, count2 = 0;

  while ((ch = fgetc(fp)) != EOF) {
    if (ch == m)
      count1++;
    if (ch == n)
      count2++;
    printf("%c", ch);
    if (ferror(fp))
      break;
  }

  printf("\n%c is seen %d times", m, count1);
  printf("\n%c is seen %d times", n, count2);

  fclose(fp);
}

我测试的文件内容是:

      90
      16
      -34
      100

1 个答案:

答案 0 :(得分:0)

返回fn(fp)后,fp将指向文件中的最后一个位置。在调用fn9之前,需要将其重置为文件的开头。使用fseek将fp指向文件的开头,它应该可以工作:)