Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: C++ подсчет строк в файле [РЕШЕНО]  (Прочитано 2205 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Vlad.V

  • Автор темы
  • Активист
  • *
  • Сообщений: 478
    • Просмотр профиля
C++ подсчет строк в файле [РЕШЕНО]
« : 10 Ноябрь 2014, 13:12:25 »
Добрый день! Учусь программировать в С++, вот столкнулся с интересным фактом. Есть два цикла while, первый - делает подсчет всех строк в файле и делает cout, второй - делает подсчет пустых строк и cout. Первый цикл проходит нормально, выводит реальное кол-во строк, второй - не хочет работать хоть убей, выводит число пустых строк = 0, а их там 3.
Решил сделать проверку на in_file.fail() и in_file.bad(), после этого программа завершается на проверке in_file.fail(). Но интересно другое, если я полностью убираю ПЕРВЫЙ цикл, то ВТОРОЙ цикл успешно проходит все проверки и выдает реальное кол-во пустых строк. Такая же штука если эти циклы поменять местами в коде, т.е. первым идет ВТОРОЙ цикл( отрабатывает идеально ), а вторым - ПЕРВЫЙ ( показывает бред ).

Код:
(Нажмите, чтобы показать/скрыть)

Кто подскажет где я косяк поймал?
Спасибо!
« Последнее редактирование: 10 Ноябрь 2014, 15:13:07 от Vlad.V »

Оффлайн SergeyIT

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 4997
  • Все по палатам!
    • Просмотр профиля
Re: C++ подсчет строк в файле
« Ответ #1 : 10 Ноябрь 2014, 13:23:29 »
У тебя перед вторым циклом указатель в конце файла стоит, передвинь в начало.
Извините, я все еще учусь

Оффлайн Vlad.V

  • Автор темы
  • Активист
  • *
  • Сообщений: 478
    • Просмотр профиля
Re: C++ подсчет строк в файле
« Ответ #2 : 10 Ноябрь 2014, 13:27:07 »
Ткните носом, пожалуйста! Что-то не вижу  :idiot2:

Оффлайн SergeyIT

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 4997
  • Все по палатам!
    • Просмотр профиля
Re: C++ подсчет строк в файле
« Ответ #3 : 10 Ноябрь 2014, 13:41:36 »
  //-----EMPTY ROWS
  in_file.seekg(0); // <<---- add
  if(! in_file.bad())
Извините, я все еще учусь

Оффлайн Vlad.V

  • Автор темы
  • Активист
  • *
  • Сообщений: 478
    • Просмотр профиля
Re: C++ подсчет строк в файле
« Ответ #4 : 10 Ноябрь 2014, 14:52:55 »
Спасибо, но что-то не помогло (( Получаю все тот же fail  :'(

Пользователь решил продолжить мысль [time]10 Ноябрь 2014, 16:01:06[/time]:
Добавил еще clear();, теперь все это выглядит так:

  //-----EMPTY ROWS
  in_file.seekg(0);
  in_file.clear();

Ошибку fail я уже не цепляю, но и значение пустых строк равно 1, а должно быть - 3. Есть еще идеи?))


Пользователь решил продолжить мысль [time]10 Ноябрь 2014, 16:11:34[/time]:
РЕШЕНО!
В итоге код должен выглядеть так:

//-----EMPTY ROWS
  in_file.clear(); // убираем все флаги включая eof
  in_file.seekg(0); // перекидываем указатель в начало файла
  if(! in_file.bad())

и именно в таком порядке я получил адекватную работу, УРА!! Два дня ломал голову. Спасибо SergeyIT, без тебя я бы ломал голову дольше!!
« Последнее редактирование: 10 Ноябрь 2014, 15:12:11 от Vlad.V »

Оффлайн SergeyIT

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 4997
  • Все по палатам!
    • Просмотр профиля
Re: C++ подсчет строк в файле [РЕШЕНО]
« Ответ #5 : 10 Ноябрь 2014, 15:39:55 »
Vlad.V, вообще-то это надо делать в одном цикле. И пустая строка часто считается, если она пустая или в ней есть только символы пробела, табуляции...
Извините, я все еще учусь

Оффлайн Vlad.V

  • Автор темы
  • Активист
  • *
  • Сообщений: 478
    • Просмотр профиля
Re: C++ подсчет строк в файле [РЕШЕНО]
« Ответ #6 : 10 Ноябрь 2014, 15:52:08 »
Насчет одного цикла, согласен, но в первые разы у меня не получилось получить адекватный результат, решил сделать два.
С пустой строкой, это я просто для практики, не более)

 

Страница сгенерирована за 0.175 секунд. Запросов: 24.