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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
NeonLost
Пес войны
 Аватар для NeonLost
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
19.04.2012, 17:16     try, throw, catch...обработка исключений #1
помогите разобраться с обработкой исключений...при вводе пароля больше 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
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
19.04.2012, 17:21     try, throw, catch...обработка исключений #2
Цитата Сообщение от NeonLost Посмотреть сообщение
переменная flag всегда true...почему?..
Потому, что всегда вызывается throw.
NeonLost
Пес войны
 Аватар для NeonLost
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
19.04.2012, 17:43  [ТС]     try, throw, catch...обработка исключений #3
throw вызывается, а catch зачем вызывается если ошибки не было?
и как исправить?..)
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
19.04.2012, 17:46     try, throw, catch...обработка исключений #4
Было исключение же.
Цитата Сообщение от NeonLost Посмотреть сообщение
и как исправить?..)
Не вызывать throw без повода.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
19.04.2012, 17:48     try, throw, catch...обработка исключений #5
http://www.cplusplus.com/reference/i...os/exceptions/
NeonLost
Пес войны
 Аватар для NeonLost
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
19.04.2012, 17:53  [ТС]     try, throw, catch...обработка исключений #6
Цитата Сообщение от NoMasters Посмотреть сообщение
Было исключение же.

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

если убрать throw, то никогда не выполниться catch...а мне нужно что бы он вызывался, когда ввели больше 10 символов...
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
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
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
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
Пес войны
 Аватар для 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...обработка исключений
Еще ссылки по теме:

try catch throw для чего нужны? C++
C++ C++ try catch throw в разных функциях
C++ Try throw catch в решении уравнения

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
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...обработка исключений
Ответ Создать тему
Опции темы

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