Подсчитать количество символов в файле до знака "*" - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем доброго времени суток! Эта программа считает количество символов в файле до знака "*", который служит подобием "EOF". Возможно ли описать эту функцию как рекурсию, и если возможно, то как она будет выглядеть?
#include <stdio.h>
#include <conio.h>
 
int iter_shet(FILE *fp)
{
char s='*';
int a=fgetc(fp), i=0;
while (a!=s)
  {
  i++;
  a=fgetc(fp);
  }
fclose(fp);
printf("%d",i);
return i;
}
 
void main()
{
int i;
clrscr();
FILE *fp;
fp=fopen("10zah.txt","r");
iter_shet(fp);
getch();
}

Решение задачи: «Подсчитать количество символов в файле до знака "*"»

textual
Листинг программы
#include <stdio.h>
 
char s='*';
int a, i;
 
void iter_shet(FILE *fp){
    a=fgetc(fp);
    if(a!=s&&!feof(fp)){
      ++i;
      iter_shet(fp);
    }
}
 
int main(){
    FILE *fp=fopen("1.txt","r");
    if(!fp){perror("Error"); exit(1);}
    iter_shet(fp);
    printf("%d", i);
    fclose(fp);
    return 0;
}

Объяснение кода листинга программы

В этом коде на языке C выполняется подсчет количества символов в файле до знака *. Вот список действий, которые выполняются в этом коде:

  1. Создание файла: Сначала программа открывает файл 1.txt для чтения с помощью функции fopen(). Если файл не может быть открыт, программа выводит сообщение об ошибке и завершает свое выполнение.
  2. Инициализация переменных: В этой части кода инициализируются три переменные: s (который присваивается символ '*'), a (который будет использоваться как счетчик символов) и i (который будет использоваться для хранения количества найденных символов).
  3. Рекурсивная функция: Здесь определена функция iter_shet(), которая будет использоваться для чтения файла. Эта функция считывает следующий символ из файла с помощью функции fgetc(). Если этот символ не равен '*' и файл не достиг конца (это проверяется с помощью функции feof()), функция увеличивает счетчик i на 1 и вызывает саму себя (то есть, выполняет рекурсивный вызов).
  4. Главная функция: В функции main() создается указатель на файл с помощью fopen(), который затем передается в функцию iter_shet(). После того, как все символы в файле были обработаны, программа закрывает файл с помощью fclose(), выводит количество найденных символов с помощью printf() и завершает свое выполнение. Обратите внимание, что этот код может вызвать проблемы, если файл очень большой, поскольку он использует рекурсию и может легко привести к переполнению стека. Кроме того, он не обрабатывает символы новой строки или возврата каретки, что может привести к неправильному подсчету символов в некоторых случаях.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.833 из 5
Похожие ответы