Подсчитать в файле число строк и количество букв “a” - C (СИ)
Формулировка задачи:
Напишите программу, которая запрашивает у пользователя имя текстового файла и подсчитывает в этом файле число строк и количество букв “a”.
Проблема заключается в том, что число строк в файле выдаёт на 1 меньше. Где у меня ошибка в коде, исправьте, пожалуйста?
#include <stdio.h> #include <conio.h> int main() { char fname[256]; FILE *fp; int chars, lines; int chars_t, lines_t; char c; printf("\nEnter file name: "); gets (fname); fp = fopen(fname, "r"); if (fp == NULL) printf ("\nCancel"); chars_t = 0; lines_t = 0; chars=0; lines=0; fp=fopen(fname, "r"); while( (c = fgetc(fp)) != EOF) { if (c == 'a') chars++; if (c =='\n') lines ++; } chars_t += chars; lines_t += lines; printf("Total a: %d", chars_t); printf("\nTotal lines: %d", lines_t); getch(); }
Решение задачи: «Подсчитать в файле число строк и количество букв “a”»
textual
Листинг программы
#include <stdio.h> #include <string.h> int main() { char fname[256]; FILE *fp; int chars, lines,i; int chars_t, lines_t; char buf[4096]; printf("\nEnter file name: "); scanf("%s",fname); fp = fopen(fname, "r"); if (fp == NULL) printf ("\nCancel"); chars_t = 0; lines_t = 0; chars=0; lines=0; fp=fopen(fname, "r"); while( !feof(fp)){ memset(buf,'\0',4096); fgets(buf,4096,fp); for(i=0;i<strlen(buf);i++)if (buf[i] == 'a')chars++; if(strlen(buf)>0)lines ++; } chars_t += chars; lines_t += lines; printf("Total a: %d", chars_t); printf("\nTotal lines: %d", lines_t); return 0; }
Объяснение кода листинга программы
- Подключаются необходимые библиотеки для работы с файлами и строками
- Создаются переменные для хранения количества букв
a
и строк в файле, а также для хранения количества символов и строк во всем файле - Выводится запрос на ввод имени файла
- Считывается имя файла с помощью функции scanf
- Открывается файл с помощью функции fopen. Если файл не может быть открыт, выводится сообщение об отмене
- Переменные chars_t и lines_t инициализируются нулями
- Переменные chars и lines инициализируются нулями
- Открывается файл с помощью функции fopen
- В цикле while считываются строки из файла с помощью функции fgets
- В каждой строке подсчитывается количество букв
a
с помощью цикла for и функции memset для очистки буфера перед каждой итерацией - Если длина строки больше нуля, увеличивается счетчик строк
- После окончания чтения файла, количество букв
a
и строк суммируется с общими значениями переменных chars_t и lines_t - Выводятся общие значения переменных chars_t и lines_t
- Функция return завершает работу программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д