Подсчитать в файле число строк и количество букв “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;
}

Объяснение кода листинга программы

  1. Подключаются необходимые библиотеки для работы с файлами и строками
  2. Создаются переменные для хранения количества букв a и строк в файле, а также для хранения количества символов и строк во всем файле
  3. Выводится запрос на ввод имени файла
  4. Считывается имя файла с помощью функции scanf
  5. Открывается файл с помощью функции fopen. Если файл не может быть открыт, выводится сообщение об отмене
  6. Переменные chars_t и lines_t инициализируются нулями
  7. Переменные chars и lines инициализируются нулями
  8. Открывается файл с помощью функции fopen
  9. В цикле while считываются строки из файла с помощью функции fgets
  10. В каждой строке подсчитывается количество букв a с помощью цикла for и функции memset для очистки буфера перед каждой итерацией
  11. Если длина строки больше нуля, увеличивается счетчик строк
  12. После окончания чтения файла, количество букв a и строк суммируется с общими значениями переменных chars_t и lines_t
  13. Выводятся общие значения переменных chars_t и lines_t
  14. Функция return завершает работу программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.643 из 5
Похожие ответы