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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
NeonLost
Пес войны
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
#1

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

19.04.2012, 17:16. Просмотров 1651. Ответов 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();}
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2012, 17:16     try, throw, catch...обработка исключений
Посмотрите здесь:

C++ throw, try, catch
Try..catch..Throw C++
try-throw-catch C++
Try Throw Catch пример C++
C++ try, catch, throw
try catch throw для чего нужны? C++
C++ C++ try catch throw в разных функциях
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1743 / 1086 / 71
Регистрация: 13.09.2011
Сообщений: 3,109
19.04.2012, 17:21     try, throw, catch...обработка исключений #2
Цитата Сообщение от NeonLost Посмотреть сообщение
переменная flag всегда true...почему?..
Потому, что всегда вызывается throw.
NeonLost
Пес войны
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
19.04.2012, 17:43  [ТС]     try, throw, catch...обработка исключений #3
throw вызывается, а catch зачем вызывается если ошибки не было?
и как исправить?..)
NoMasters
Псевдослучайный
1743 / 1086 / 71
Регистрация: 13.09.2011
Сообщений: 3,109
19.04.2012, 17:46     try, throw, catch...обработка исключений #4
Было исключение же.
Цитата Сообщение от NeonLost Посмотреть сообщение
и как исправить?..)
Не вызывать throw без повода.
rangerx
1923 / 1532 / 139
Регистрация: 31.05.2009
Сообщений: 2,896
19.04.2012, 17:48     try, throw, catch...обработка исключений #5
http://www.cplusplus.com/reference/i...os/exceptions/
NeonLost
Пес войны
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
19.04.2012, 17:53  [ТС]     try, throw, catch...обработка исключений #6
Цитата Сообщение от NoMasters Посмотреть сообщение
Было исключение же.

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

если убрать throw, то никогда не выполниться catch...а мне нужно что бы он вызывался, когда ввели больше 10 символов...
NoMasters
Псевдослучайный
1743 / 1086 / 71
Регистрация: 13.09.2011
Сообщений: 3,109
19.04.2012, 17:58     try, throw, catch...обработка исключений #7
getline
If the function stops reading because this size is reached, the failbit internal flag is set.
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
19.04.2012, 18:44     try, throw, catch...обработка исключений #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...обработка исключений
NeonLost
Пес войны
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
19.04.2012, 19:25  [ТС]     try, throw, catch...обработка исключений #9
Цитата Сообщение от easybudda Посмотреть сообщение
Вот так вызывается:
C++
1
                   cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
Вложение 144407
спасибо, все работает, объясните , если не трудно, эту строку)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2012, 19:36     try, throw, catch...обработка исключений
Еще ссылки по теме:

C++ Try throw catch в решении уравнения
Try - catch - throw для чего они C++
C++ Try,catch,throw,OVERFLOW!
Обработка любых исключений в try catch на C++ также как на C# C++
C++ Try, catch, throw

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

Или воспользуйтесь поиском по форуму:
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
19.04.2012, 19:36     try, throw, catch...обработка исключений #10
Цитата Сообщение от NeonLost Посмотреть сообщение
объясните , если не трудно, эту строку
Если ввести строку длиннее, чем помещается в выделенный буфер, остаток строки остаётся в буфере ввода, и нужно его оттуда как-то вычистить. Вот собственно это и происходит. Тут подробнее: http://www.cplusplus.com/reference/i...stream/ignore/
Yandex
Объявления
19.04.2012, 19:36     try, throw, catch...обработка исключений
Ответ Создать тему
Опции темы

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