Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Строки - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Пожалуйста подскажите новичку http://www.cyberforum.ru/cpp-beginners/thread10652.html
Добрый день всем! Недавно начал самостоятельно изучать С++ по книге Р. Лафоре « Объектноориентрованое прогаммирование в С++». Книга очень интересная, написано очень доходчиво, но всё равно появляются...
C++ Перемещение в системе координат День добрый! я в программировании на языке С++, новечек. изучаю самостоятельно обложившись книгами и интернетом. в решении математических задач и в составлении базы данных, а затем в ее сортировке... http://www.cyberforum.ru/cpp-beginners/thread10616.html
Создание часов...подскажите пожалуйста C++
Не подскажите, как сделать часы.. я предполагаю сделать класс, который имел бы функцию часов... Мне нужно чтобы каждые например 15 сек. что-то происходило...например создавался объект...спасибо).
Ошибка при работе delete в деструкторе C++
enum place { first = 1, second }; class Passanger { public: Passanger(); void Call(); void PushButton(); int isFloor(); private:
C++ Драйвер ММ-клавиатуры http://www.cyberforum.ru/cpp-beginners/thread10533.html
Захотелось написать свой драйвер, точнее обычную программу, которая организует работу мультимедия клавы... По сути надо: 1. перехватить сочетания клавиш 2. Отправить сообщение другой проги или...
C++ Может, есть у кого готовый шаблон теста? Нужно написать тест вида - Начало теста - Вопрос, варианты ответов - Выбор ответа, и нажатие на "ок" - Далее переход к следующему вопросу - В конце показ количества ошибок и в каких вопросах. ... подробнее

Показать сообщение отдельно
Vourhey
Почетный модератор
6482 / 2257 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.08.2008, 21:44
Уф. Вообщем я подебажил немного эту прогу.
Когда ты вызваешь read он читает и доходит до конца. Таким образом мы получаем установленный бит eof. Отсюда, мы получаем true на fail().
В либах С++ при вызове seekg проверяется fail(). И если она возвращает true, то сбрасываются все флаги ошибок через вызов clear и возвращается в главную прогу. Если вызвать сторой раз seekg, то fail() вернет false (мы же clear() вызвали прошлый раз.) и пойдет процесс смены позиции, поэтому второй вызов сработает.
Итак, несколько вариантов:
1) два раза вызвать seekg:
Код
fin.seekg(0, ios::beg);
fin.seekg(0, ios::beg);
первый снимет флаги, второй изменит позицию.
2) вручную вызвать снятие флагов:
Код
if (fin.fail())
{
    fin.clear();
}
fin.seekg(0, ios::beg);
3) А взаправду лучше так:
Код
if (fin.eof())
{
   fin.clear();
}
fin.seekg(0, ios::beg);
Ну вот. Мог же сам разобраться.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru