Дан текстовый файл. Определить сколько в нем содержится цифр.
Программа должна содержать итеративную и рекурсивную функции, и не должна иметь глобальных переменных.
файл может содержать более одной строки (как это учесть?), где распологаются буквы и цифры через любой разделитель.
какое условие нужно задавать для нахождения цифр?
Не знаю, зачем здесь НЕрекурсивная функция, если вполне можно обойтись одной рекурсией:
#include <stdio.h>
#include <ctype.h>
int get_count(FILE *f) {
if(feof(f)) return 0;
return
(isdigit(getc(f)) ? 1 : 0) + get_count(f);
}
int main() {
FILE *f;
if((f = fopen("test.txt", "rt")) == NULL) {
printf("Cannot open input file.\n");
return 1;
}
printf("%d", get_count(f));
fclose(f);
return 0;
}
isdigit это не функция, а макрос, описанный в ctype.h. Он принимает символ, и возвращает 0, если это НЕ цифра (от '0' до '9'), и ненулевое значение, если цифра...
А функция getc(f) читает из потока f очередной символ, и возвращает его как результат... Описана в stdio.h, как и все остальное для работы с файлом...
...
int get_count(FILE *f) {
int ch;
if(feof(f)) return 0;
return
(((ch = getc(f)) >= '0' && (ch <= '9')) ? 1 : 0) + get_count(f);
}
...
#include <stdio.h>
#include <ctype.h>
int get_count(FILE *f) {
if(feof(f)) return 0;
return
(isdigit(getc(f)) ? 1 : 0) + get_count(f);
}
int main() {
FILE *f;
if((f = fopen("test.txt", "rt")) == NULL) {
printf("Cannot open input file.\n");
return 1;
}
printf("%d", get_count(f));
fclose(f);
return 0;
}
Потому, что обычно ноль - это признак безошибочного завершения программы, а если файл не открылся - это ошибка... Вот и возвращаем код ошибки...
Можно, например, при всех неудачах с открытием файла возвращать 1, при неудачах создания файла - возвращать 2, при ошибке, скажем, записи в файл, возвращать 3, ну и т.д.
Тогда и из вызывающей программы (если программа будет откуда-нибудь вызываться) можно будет с уверенностью сказать, что послужило причиной ошибки ...