Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка ошибок потоков, Обработка ошибок потоков 
:(
    Опции темы
RomaKiev
Дата 18.1.2011, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 28.11.2010
Где: Киев

Репутация: нет
Всего: нет



Доброго времени суток! Помогите разобраться в обработке ошибок потоков
Есть фрагмент кода:
Код

while(true)
    {
        cout<<"Vvedite zeloje chislo: ";
        cin>>b;
        if(cin.good())
        {
            cin.ignore(10, '\n');
            break;
            }
        cin.clear();
        cout<<"Nepravilnij vvod dannih!"<<endl;
        cin.ignore(10, '\n');
    }



Первый вопрос: 
Переменная b является целочисленной. Каким образом функция good() определяет корректность ввода данных? По типу переменной,
в которую я буду сохранять вводимые данные, или по каким-либо другим критериям?

Второй вопрос: Неясно назначение функции ignore()? Что она делает? На этом же форуме прочитал следующее:
ignore(n,'\n') число пропускаемых символов и символ разделения т.е. пропускает n символов, если ранее не будет найден '\n', далее если '\n' введен раньше n то будет удален из буфера и ignore() завершит работу.
Какие именно символы она пропускает, кроме разделителя?

Третий вопрос:
Неясно назначение функции clear()?

Заранее спасибо!


PM MAIL   Вверх
mes
Дата 18.1.2011, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250





--------------------
PM MAIL WWW   Вверх
RomaKiev
Дата 18.1.2011, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 28.11.2010
Где: Киев

Репутация: нет
Всего: нет




За ссылки конечно спасибо, но я, к сожалению, не владею английским языком. 
PM MAIL   Вверх
Estranged
Дата 18.1.2011, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 30.8.2010

Репутация: нет
Всего: 3



Учить программирование не зная английского почти невозможно. Вся документация на английском.
PM MAIL   Вверх
toxx
Дата 18.1.2011, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 653
Регистрация: 4.3.2009
Где: НН

Репутация: 4
Всего: 13



Цитата

За ссылки конечно спасибо, но я, к сожалению, не владею английским языком. 

там английский никакой + пример есть
PM MAIL   Вверх
Alca
Дата 19.1.2011, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 2
Всего: 50



Цитата

Учить программирование не зная английского почти невозможно. Вся документация на английском.

Хорошо, что не на китайском ))


--------------------
PM WWW ICQ Skype Jabber   Вверх
JЕT
Дата 26.1.2011, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 30.9.2010

Репутация: нет
Всего: нет



Цитата

Первый вопрос: 
Переменная b является целочисленной. Каким образом функция good() определяет корректность ввода данных? По типу переменной,
в которую я буду сохранять вводимые данные, или по каким-либо другим критериям?


Функция good() возвращает true, если для потока не установлен ни один из битов: failbit, badbit, eofbit.

Цитата

Второй вопрос: Неясно назначение функции ignore()? Что она делает? На этом же форуме прочитал следующее:
ignore(n,'\n') число пропускаемых символов и символ разделения т.е. пропускает n символов, если ранее не будет найден '\n', далее если '\n' введен раньше n то будет удален из буфера и ignore() завершит работу.
Какие именно символы она пропускает, кроме разделителя?

Те, которые будут переданы в поток.
Например:

Код

std::cin.ignore( 2 );
std::cin >> var;
std::cout << var;


Вы вводите qwerty, а получаете erty. То есть пропускается первые 2 символа.

Цитата

Третий вопрос:
Неясно назначение функции clear()?

Для очистки битов ошибок и установки goodbit.
PM MAIL   Вверх
RomaKiev
Дата 26.1.2011, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 28.11.2010
Где: Киев

Репутация: нет
Всего: нет



Цитата(JЕT @ 26.1.2011,  11:14)
Цитата

Первый вопрос: 
Переменная b является целочисленной. Каким образом функция good() определяет корректность ввода данных? По типу переменной,
в которую я буду сохранять вводимые данные, или по каким-либо другим критериям?


Функция good() возвращает true, если для потока не установлен ни один из битов: failbit, badbit, eofbit.

Цитата

Второй вопрос: Неясно назначение функции ignore()? Что она делает? На этом же форуме прочитал следующее:
ignore(n,'\n') число пропускаемых символов и символ разделения т.е. пропускает n символов, если ранее не будет найден '\n', далее если '\n' введен раньше n то будет удален из буфера и ignore() завершит работу.
Какие именно символы она пропускает, кроме разделителя?

Те, которые будут переданы в поток.
Например:

Код

std::cin.ignore( 2 );
std::cin >> var;
std::cout << var;


Вы вводите qwerty, а получаете erty. То есть пропускается первые 2 символа.

Цитата

Третий вопрос:
Неясно назначение функции clear()?

Для очистки битов ошибок и установки goodbit.

Спасибо за ответ! Но не могли бы вы обьяснить ещё один момент:
а с какой целью мы используем  функцию cin.ignore(10, '\n') именно здесь?
Код

while(true)
    {
        cout<<"Vvedite zeloje chislo: ";
        cin>>b;
        if(cin.good())
        {
            cin.ignore(10, '\n');
            break;
            }
        cin.clear();
        cout<<"Nepravilnij vvod dannih!"<<endl;
        cin.ignore(10, '\n');
    }

Ведь мы то уже считали данные из потока и поместили их в переменную b. Какие символы мы пропускаем далее как в конструкции if, так и после нее?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0867 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.