Посчитать количество строк в файле - C (СИ)

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

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

В файле input.txt записана информация из нескольких текстовых строк. Вывести содержимое этого файла на экран, посчитать количество строк в файле.

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

textual
Листинг программы
/*
 ============================================================================
 Name        : c_file_row_count.c
 Author      : UranFlex
 Version     : 0.1 alpha
 Copyright   : GNU GPL
 Description : В файле input.txt записана информация из нескольких текстовых строк.
 *             Вывести содержимое этого файла на экран, посчитать количество строк в файле.
 *             C, Ansi-style.
 ============================================================================
 */
 
#include <stdio.h>
#include <stdlib.h>
 
#define FNAME "input.txt" // имя исходного файла
 
int main( void ) {
    // пробуем открыть файл для чтения
    FILE* in = fopen( FNAME, "r" );
 
    // обрабатываем ошибку открытия файла
    if ( in == NULL ) {
        perror( "Ошибка при открытии исходного файла" );
        return EXIT_FAILURE;
    }
 
    size_t counter = 0; // предполагаем, что строк ноль в файле - т.е. пустой
    int ch, pre = EOF; // текущий символ, последний считаный символ
 
    printf( "%s %s\n", "Содержимое файла", FNAME );
 
    // в цикле считаем сколько переводов строки в файле и запоминаем это в переменную counter
    // а также выводим на экран каждый считаный символ.
    // если файл пустой, то тело цикла не выполнится ни разу, так как первый считанный символ будет как раз EOF
    // и в pre останется EOF
    while ( ( ch = fgetc( in ) ) != EOF ) { // в цикле проходим весь файл посимвольно
        pre = ch; // запоминаем последний считаный символ
 
        if ( ch == '\n' ) // если нашли перевод строки,
            ++counter; // то увеличиваем счетчик строк
 
        putchar( ch ); // выводим очередной символ на экран
    }
 
    // весь смысл переменной pre в том, чтобы запомнить какой символ мы считали перед тем как наткнулись на EOF в файле
    // или в pre будет EOF - если тело цикла ни разу не выполнилось, это будет при пустом файле
    // последняя строка файла может заканчиваться не \n, а строку посчитать надо - вот для этого и нужна переменная pre
 
    if ( pre == EOF ) // если файл пустой
        puts( "Файл пустой!" ); // выводим информацию об этом
    else if ( pre != '\n'  ) { // если pre содержит в себе не перевод строки, и файл не пустой
        ++counter; // то увеличиваем счетчик строк
        puts( "" );
    }
 
    puts( "" );
    // выводим на экран информацию о количестве строк
    printf( "%s %s %d", "Строк в файле", FNAME, counter );
    return EXIT_SUCCESS;
}

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

  1. Включаем необходимые заголовочные файлы
  2. Определяем имя исходного файла
  3. Открываем файл для чтения
  4. Обрабатываем ошибку открытия файла
  5. Инициализируем переменные
  6. Выводим на экран содержимое файла и его имя
  7. В цикле считываем символы из файла и увеличиваем счетчик строк при переводе строки
  8. Выводим каждый считанный символ на экран
  9. Если файл пустой, выводим соответствующую информацию
  10. Если последняя строка файла не заканчивается переводом строки, увеличиваем счетчик строк и выводим пустую строку
  11. Выводим информацию о количестве строк в файле

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


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

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

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