опять iostream
От: GiDRAvlic Латвия  
Дата: 30.04.03 11:49
Оценка:
Здравствуйте!
Кто вразумит? Есть код

int MyIntVariablе;
...
try{
    cin >> MyIntVariable;
    ...
}
catch(exception){
    cerr << "Input variable must be integer-based";
    cin.clear();
    cin.ignore(10000, '\n');
}
...

Отрабатывает на ура. За исключением ... когда вводититься вещественное число.
А дальше крах проги. Мысли есть?
Спасибо!
... << RSDN@Home 1.0 beta 6a >>
Re: опять iostream
От: Михаил Можаев Россия www.mozhay.chat.ru
Дата: 30.04.03 13:14
Оценка:
Здравствуйте, GiDRAvlic, Вы писали:

GDR>Отрабатывает на ура. За исключением ... когда вводититься вещественное число.

GDR>А дальше крах проги. Мысли есть?

А как выглядит этот крах проги? Приведи более подробное описание — что вводится, что выводится и т.д.
... << RSDN@Home 1.0 beta 6a >>
Re[2]: опять iostream
От: GiDRAvlic Латвия  
Дата: 30.04.03 13:21
Оценка:
Здравствуйте, Михаил Можаев, Вы писали:

ММ>Здравствуйте, GiDRAvlic, Вы писали:


GDR>>Отрабатывает на ура. За исключением ... когда вводититься вещественное число.

GDR>>А дальше крах проги. Мысли есть?

ММ>А как выглядит этот крах проги? Приведи более подробное описание — что вводится, что выводится и т.д.


В Debug режиме окно (Abort, Retry, Ignore) в Release режиме в output stream
Содержание:
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
... << RSDN@Home 1.0 beta 6a >>
Re[2]: опять iostream
От: GiDRAvlic Латвия  
Дата: 30.04.03 13:30
Оценка:
Здравствуйте, Михаил Можаев, Вы писали:

ММ>Здравствуйте, GiDRAvlic, Вы писали:


GDR>>Отрабатывает на ура. За исключением ... когда вводититься вещественное число.

GDR>>А дальше крах проги. Мысли есть?

ММ>А как выглядит этот крах проги? Приведи более подробное описание — что вводится, что выводится и т.д.

На запрос введите целочисленное число (cin >> MyIntVariable)
вводиться, как я уже писал вещественное число:
допустим 12.12(через точку)

Может существует стандарт ввода веществеттых чисел, так как проходит ввод .010302 и данной проблемы не возникает?
Спасибо.
... << RSDN@Home 1.0 beta 6a >>
Re[3]: опять iostream
От: Михаил Можаев Россия www.mozhay.chat.ru
Дата: 30.04.03 13:48
Оценка:
Здравствуйте, GiDRAvlic, Вы писали:

Вот этот пример работает у меня абсолютно нормально:
#include <iostream>

int main()
{
    int MyIntVariable;
    
    try
    {
        std::cin >> MyIntVariable;
    }
    catch(std::exception)
    {
        std::cout << "Input variable must be integer-based";
        std::cin.clear();
        std::cin.ignore(10000, '\n');
    }
    
    std::cout << MyIntVariable << '\n';
    
    return 0;
}


Попробуй в отладчике пошагово пройтись и посмотри, где конкретно ошибка.
... << RSDN@Home 1.0 beta 6a >>
Re: опять iostream
От: Bell Россия  
Дата: 30.04.03 14:05
Оценка:
Здравствуйте, GiDRAvlic, Вы писали:

А можно для начала платформу/реализацию STL (если STL используется)?
Любите книгу — источник знаний (с) М.Горький
Re: опять iostream
От: template  
Дата: 01.05.03 19:07
Оценка:
Здравствуйте, GiDRAvlic, Вы писали:


GDR>А дальше крах проги. Мысли есть?

GDR>Спасибо!

1. Исключение exception поток не сгенерирует (у меня не получилось)
2. Если требуется контролировать, что ввел пользователь нужно
проверять состояние потока — метод rdstate() или вот пример с
генерацией исключения


int MyVarible;
ios_base::iostate old_state = cin.exceptions(); // какие исключения поток генерил
cin.exceptions(ios_base::failbit); // на что реагировать 
try{
    cin >> MyVarible;
}
catch(ios_base::failure) { // пользователь начудил с вводом

          cerr << "Input variable must be integer-based";
          cin.clear();
        cin.ignore(10000, '\n');
}
cin.exceptions(old_state); // вернем все на место
Re[4]: опять iostream
От: GiDRAvlic Латвия  
Дата: 02.05.03 06:52
Оценка:
Здравствуйте, Михаил Можаев, Вы писали:

ММ>Здравствуйте, GiDRAvlic, Вы писали:


ММ>Вот этот пример работает у меня абсолютно нормально:


Нашел ошибку. Я модифифировал немного код по причине использования большого числа empty() и clear().
и на catch(std::exception) делел throw "Какое-то сообщение"
далее
catch(char* Message){
    std::cout << Message;
    std::cin.clear();
    std::cin.ignore(10000, '\n');
}

Видимо так нельзя
ММ>Попробуй в отладчике пошагово пройтись и посмотри, где конкретно ошибка.
Спасибо
... << RSDN@Home 1.0 beta 6a >>
Re[5]: опять iostream
От: Михаил Можаев Россия www.mozhay.chat.ru
Дата: 03.05.03 19:46
Оценка:
Здравствуйте, GiDRAvlic, Вы писали:

GDR>и на catch(std::exception) делел throw "Какое-то сообщение"

GDR>далее
GDR>
GDR>catch(char* Message){
GDR>


Попробуй
catch(const char* Message){
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.