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

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

Восстановить пароль Регистрация
 
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
31.07.2013, 15:05     istream состояние bad #1
Всем привет! Как можно вызвать состояние bad у потока istream? (т.е. не так, что "состояние bad может быть вызвано серьезной ошибкой чтения", а небольшой пример, как просто можно это состояние вызвать (конечно, не используя clear)).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2013, 15:05     istream состояние bad
Посмотрите здесь:

istream и конец строки C++
C++ istream, ostream
C++ istream - считывание определённой строки
Объект cin и класс istream C++
Выделение памяти для буффера, под std::istream& operator>>(std::istream &, String &) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,337
Завершенные тесты: 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
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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
Еще ссылки по теме:

std::istream часть кода C++
istream C++
Почему istream::get() ? C++

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

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

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