Ответы на вопрос:
Name : c_file_row_count.c
Author : UranFlex
Version : 0.1 alpha
Copyright : GNU GPL
Description : В файле input.txt записана информация из нескольких текстовых строк. Выводим содержимое этого файла на экран, посчитаем количество строк в файле.
#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;
Объяснение:
Сейчас решаем такую же задачу, только на олимпиаде, вроде так.
Реши свою проблему, спроси otvet5GPT
-
Быстро
Мгновенный ответ на твой вопрос -
Точно
Бот обладает знаниями во всех сферах -
Бесплатно
Задай вопрос и получи ответ бесплатно
Популярно: Информатика
-
maks261410.02.2022 18:25
-
SiriusSnak23.09.2021 13:15
-
shitova20023p02gai28.09.2022 21:37
-
green12108.12.2021 10:49
-
Edinorog1Panda27.06.2021 00:07
-
roman2003102226.05.2021 11:30
-
marsel23405.11.2020 12:37
-
Ketinur17.08.2020 00:54
-
ilyas5901.09.2020 07:39
-
1lilita16.08.2022 04:13
Есть вопросы?
-
Как otvet5GPT работает?
otvet5GPT использует большую языковую модель вместе с базой данных GPT для обеспечения высококачественных образовательных результатов. otvet5GPT действует как доступный академический ресурс вне класса. -
Сколько это стоит?
Проект находиться на стадии тестирования и все услуги бесплатны. -
Могу ли я использовать otvet5GPT в школе?
Конечно! Нейросеть может помочь вам делать конспекты лекций, придумывать идеи в классе и многое другое! -
В чем отличия от ChatGPT?
otvet5GPT черпает академические источники из собственной базы данных и предназначен специально для студентов. otvet5GPT также адаптируется к вашему стилю письма, предоставляя ряд образовательных инструментов, предназначенных для улучшения обучения.