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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
#1

istream состояние bad - C++

31.07.2013, 15:05. Просмотров 483. Ответов 7
Метки нет (Все метки)

Всем привет! Как можно вызвать состояние bad у потока istream? (т.е. не так, что "состояние bad может быть вызвано серьезной ошибкой чтения", а небольшой пример, как просто можно это состояние вызвать (конечно, не используя clear)).
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
31.07.2013, 15:11     istream состояние bad #2
Так, например
C++
1
2
3
4
5
6
int main()
{
    cin.putback('l');
    cin.putback('l');
    cout<<cin.eof()<<cin.fail()<<cin.bad()<<cin.good()<<endl;
}
Только не знаю, почему так, хотя по логике уже после первого cin.putback('l'); должно что-то произойти, но там возвращается good
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2583 / 235
Регистрация: 01.11.2011
Сообщений: 6,384
Завершенные тесты: 1
31.07.2013, 15:15     istream состояние bad #3
Цитата Сообщение от ViktorKozlov Посмотреть сообщение
Так, например
у меня выводит
Код
0001
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
31.07.2013, 15:18  [ТС]     istream состояние bad #4
У меня выводит тоже, что и у SatanaXIII.
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
31.07.2013, 15:19     istream состояние bad #5
Цитата Сообщение от SatanaXIII Посмотреть сообщение
у меня выводит
Код
0001
Я на VS2008 и devcpp получил 0110, а на ideone тоже 0001
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
31.07.2013, 15:47     istream состояние bad #6
1)
C++
1
std::cin.setstate(std::ios::badbit);
2)
C++
1
std::cin.rdbuf(0);
3)
C++
1
std::cin.unget();
И так далее.
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
31.07.2013, 16:27  [ТС]     istream состояние bad #7
ForEveR, быть может я неправильно выразился... Постараюсь перефразировать: как получить поток в состоянии bad, не совершая с потоком никаких программных действий (только чтение из потока), а в bad его должно перевести что-то из внешний "раздражителей" (например, неправильный файл). Так как получить этот неправильный файл, или что-то что переведет поток в состояние bad извне?

Добавлено через 2 минуты
Например, что может перевести в состояние bad поток ifs из этого кода?
C++
1
2
3
4
5
6
7
8
9
10
11
#include <fstream>
#include <iostream>
 
int main()
{
    std::ifstream ifs("data.txt");
    int x;
    while (ifs >> x);
    if (ifs.bad())
        std::cout << "Мы получили что нужно.";
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2013, 16:44     istream состояние bad
Еще ссылки по теме:

Почему istream::get() ? C++
Перегрузка ofstream, istream C++
C++ В чем причина ошибки istream
C++ Использование конструктора с параметром istream
Функции istream, требуется объяснение C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
31.07.2013, 16:44     istream состояние bad #8
Dani, Ничто. Только в failbit.
Чтобы понять что к чему советую почитать раздел 27 стандарта.
Yandex
Объявления
31.07.2013, 16:44     istream состояние bad
Ответ Создать тему
Опции темы

Текущее время: 15:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru