Подсчитать в файле число строк и количество букв “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 завершает работу программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д