Подсчитать количество символов в файле до знака "*" - 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()и завершает свое выполнение. Обратите внимание, что этот код может вызвать проблемы, если файл очень большой, поскольку он использует рекурсию и может легко привести к переполнению стека. Кроме того, он не обрабатывает символы новой строки или возврата каретки, что может привести к неправильному подсчету символов в некоторых случаях.