Добрый день! Учусь программировать в С++, вот столкнулся с интересным фактом. Есть два цикла while, первый - делает подсчет всех строк в файле и делает cout, второй - делает подсчет пустых строк и cout. Первый цикл проходит нормально, выводит реальное кол-во строк, второй - не хочет работать хоть убей, выводит число пустых строк = 0, а их там 3.
Решил сделать проверку на in_file.fail() и in_file.bad(), после этого программа завершается на проверке in_file.fail(). Но интересно другое, если я полностью убираю ПЕРВЫЙ цикл, то ВТОРОЙ цикл успешно проходит все проверки и выдает реальное кол-во пустых строк. Такая же штука если эти циклы поменять местами в коде, т.е. первым идет ВТОРОЙ цикл( отрабатывает идеально ), а вторым - ПЕРВЫЙ ( показывает бред ).
Код:
#include <iostream>
#include <fstream>
#include <string>
int main()
{
using std::cout;
using std::endl;
using std::cerr;
using std::ifstream;
ifstream in_file("test.conf");
if(!in_file.is_open())
{
cerr << "Can't open conf file, program was stopped" << endl;
return 1;
}
using std::string;
string buff{0};
int rows(1);
int empty_rows(0);
//--- TOTAL ROWS
while( !in_file.eof() )
{
if( in_file.get() == '\n' ) rows++;
}
cout << "Total rows in conf file is: " << rows << endl;
//-----EMPTY ROWS
if(! in_file.bad())
{
if(in_file.fail())
{
cerr << "!!fail" << endl;
return 1;
}
while( !in_file.eof() )
{
getline(in_file, buff);
if( buff.empty() ) empty_rows++;
}
}
else
{
cerr << "bad file" << endl;
return 1;
}
//-------------------
cout << "Total empty rows in conf file is: " << empty_rows << endl;
return int();
}
Кто подскажет где я косяк поймал?
Спасибо!