Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
NeonLost
Пес войны
110 / 87 / 22
Регистрация: 23.02.2012
Сообщений: 653
#1

try, throw, catch...обработка исключений - C++

19.04.2012, 17:16. Просмотров 1839. Ответов 9
Метки нет (Все метки)

помогите разобраться с обработкой исключений...при вводе пароля больше 10 символов должна быть непредвиденная ошибка, пытаюсь ее поймать,но у меня ничего не получается...переменная flag всегда true...почему?..

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void main()
{
bool flag=false;    
char pass[10];
char passw[]="2296";
setlocale( LC_ALL,"Russian" );
 
do   {  try{    
    cout << "Введите пароль: ";
    
    cin.getline(pass, sizeof(pass)); throw 1;
}
    catch(int)
    { flag=true; break;}
    system("cls");
  }  while (strcmp(pass,passw)!=0) ;
 
if (flag==true) {cerr<<"ошибка ввода";}
if (flag==false) {read();}
}

http://www.cyberforum.ru/cpp-beginners/thread1724161.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2012, 17:16
Я подобрал для вас темы с готовыми решениями и ответами на вопрос try, throw, catch...обработка исключений (C++):

Try, catch, throw
Подскажите, как с помощью try, catch, throw, обработать исключение на вводимый...

Try..catch..Throw
Объясните пожалуйста разницу. Желательно с примерами, например деление на ноль,...

try, catch, throw
пишу класс namespace mystd { const uint32_t def_size = 1 &lt;&lt; 20;...

try-throw-catch
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; class Drob {...

throw, try, catch
Пожалуйста, помогите разобраться в том, что это такое, и как его правильно...

9
NoMasters
Псевдослучайный
1909 / 1120 / 90
Регистрация: 13.09.2011
Сообщений: 3,178
19.04.2012, 17:21 #2
Цитата Сообщение от NeonLost Посмотреть сообщение
переменная flag всегда true...почему?..
Потому, что всегда вызывается throw.
0
NeonLost
Пес войны
110 / 87 / 22
Регистрация: 23.02.2012
Сообщений: 653
19.04.2012, 17:43  [ТС] #3
throw вызывается, а catch зачем вызывается если ошибки не было?
и как исправить?..)
0
NoMasters
Псевдослучайный
1909 / 1120 / 90
Регистрация: 13.09.2011
Сообщений: 3,178
19.04.2012, 17:46 #4
Было исключение же.
Цитата Сообщение от NeonLost Посмотреть сообщение
и как исправить?..)
Не вызывать throw без повода.
0
rangerx
1941 / 1550 / 478
Регистрация: 31.05.2009
Сообщений: 2,913
19.04.2012, 17:48 #5
http://www.cplusplus.com/reference/iostream/ios/exceptions/
1
NeonLost
Пес войны
110 / 87 / 22
Регистрация: 23.02.2012
Сообщений: 653
19.04.2012, 17:53  [ТС] #6
Цитата Сообщение от NoMasters Посмотреть сообщение
Было исключение же.

Не вызывать throw без повода.

если убрать throw, то никогда не выполниться catch...а мне нужно что бы он вызывался, когда ввели больше 10 символов...
0
NoMasters
Псевдослучайный
1909 / 1120 / 90
Регистрация: 13.09.2011
Сообщений: 3,178
19.04.2012, 17:58 #7
getline
If the function stops reading because this size is reached, the failbit internal flag is set.
1
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,230
19.04.2012, 18:44 #8
Цитата Сообщение от NeonLost Посмотреть сообщение
а мне нужно что бы он вызывался, когда ввели больше 10 символов...
Вот так вызывается:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <cstring>
#include <limits>
 
int main(){
    const int PASSWORD_LENGTH(10);
    const char * CORRECT_PASSWORD("2296");
    
    char buf[PASSWORD_LENGTH];
    
    std::cin.exceptions(std::istream::failbit | std::istream::badbit);
    
    do {
        try {
            std::cout << "Password: ";
            std::cin.getline(buf, PASSWORD_LENGTH);
        }
        catch ( std::istream::failure e ) {
            std::cerr << "Error (password may be too long)!" << std::endl;
            std::cin.clear();
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        }
    } while ( strcmp(buf, CORRECT_PASSWORD) && std::cout << "Wrong password, try another...\n" );
    
    std::cout << "Some secret things" << std::endl;
    
    return 0;
}
try, throw, catch...обработка исключений
1
NeonLost
Пес войны
110 / 87 / 22
Регистрация: 23.02.2012
Сообщений: 653
19.04.2012, 19:25  [ТС] #9
Цитата Сообщение от easybudda Посмотреть сообщение
Вот так вызывается:
C++
1
                   cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
Вложение 144407
спасибо, все работает, объясните , если не трудно, эту строку)
0
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,230
19.04.2012, 19:36 #10
Цитата Сообщение от NeonLost Посмотреть сообщение
объясните , если не трудно, эту строку
Если ввести строку длиннее, чем помещается в выделенный буфер, остаток строки остаётся в буфере ввода, и нужно его оттуда как-то вычистить. Вот собственно это и происходит. Тут подробнее: http://www.cplusplus.com/reference/iostream/istream/ignore/
0
19.04.2012, 19:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2012, 19:36
Привет! Вот еще темы с решениями:

Try,catch,throw,OVERFLOW!
Добрый вечер! И СНОВА с вами try..catch...:p Я очень долго пытался понять...

Try Throw Catch пример
Как-то не особо много инфы нарыл по данной теме... Может у кого есть какие уже...

Try throw catch в решении уравнения
Есть уравнение y=1/sqrt(x-3). нужно считать x, пусть он будет целым. а...

C++ try catch throw в разных функциях
try и catch находятся в одной функции а throw вызывается из другой. ну MVS...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru