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