fgetc () не работает должным образом в функции - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь прочитать текстовый файл, символ за символом, с функцией 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 голосов
/ 04 декабря 2018

После возврата fn (fp) fp будет указывать на последнюю позицию в файле.Это должно быть сброшено в начало файла перед вызовом fn9.Используйте fseek, чтобы указать fp на начало файла, и оно должно работать:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...