Подсчитать в файле число строк и количество букв “a” - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Напишите программу, которая запрашивает у пользователя имя текстового файла и подсчитывает в этом файле число строк и количество букв “a”. Проблема заключается в том, что число строк в файле выдаёт на 1 меньше. Где у меня ошибка в коде, исправьте, пожалуйста?
Листинг программы
  1. #include <stdio.h>
  2. #include <conio.h>
  3. int main()
  4. {
  5. char fname[256];
  6. FILE *fp;
  7. int chars, lines;
  8. int chars_t, lines_t;
  9. char c;
  10. printf("\nEnter file name: ");
  11. gets (fname);
  12. fp = fopen(fname, "r");
  13. if (fp == NULL) printf ("\nCancel");
  14. chars_t = 0;
  15. lines_t = 0;
  16. chars=0;
  17. lines=0;
  18. fp=fopen(fname, "r");
  19. while( (c = fgetc(fp)) != EOF)
  20. {
  21. if (c == 'a')
  22. chars++;
  23. if (c =='\n')
  24. lines ++;
  25. }
  26. chars_t += chars;
  27. lines_t += lines;
  28. printf("Total a: %d", chars_t);
  29. printf("\nTotal lines: %d", lines_t);
  30. getch();
  31. }

Решение задачи: «Подсчитать в файле число строк и количество букв “a”»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main()
  5. {
  6.     char fname[256];
  7.     FILE *fp;
  8.     int chars, lines,i;
  9.     int chars_t, lines_t;
  10.     char buf[4096];
  11.     printf("\nEnter file name: ");
  12.     scanf("%s",fname);
  13.     fp = fopen(fname, "r");
  14.     if (fp == NULL) printf ("\nCancel");
  15.     chars_t = 0;
  16.     lines_t = 0;
  17.     chars=0;
  18.     lines=0;
  19.     fp=fopen(fname, "r");
  20.     while( !feof(fp)){
  21.         memset(buf,'\0',4096);
  22.         fgets(buf,4096,fp);
  23.         for(i=0;i<strlen(buf);i++)if (buf[i] == 'a')chars++;
  24.         if(strlen(buf)>0)lines ++;
  25.     }
  26.     chars_t += chars;
  27.     lines_t += lines;
  28.     printf("Total a: %d", chars_t);
  29.     printf("\nTotal lines: %d", lines_t);
  30. return 0;
  31. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы