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