Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

Обработка любых исключений в try catch на C++ также как на C# - C++
Есть ли возможность обрабатывать все ошибки в программе на C++, точно также как это сделано на C#? На C# просто помещаешь текст...

try-throw-catch - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; class Drob { public: int obchuslennia (int a, int...

Try, catch, throw - C++
Подскажите, как с помощью try, catch, throw, обработать исключение на вводимый тип данных? Например, допускается только тип int, что...

throw, try, catch - C++
Пожалуйста, помогите разобраться в том, что это такое, и как его правильно использовать. Где можно об этом почитать? P.S. только начал...

Try..catch..Throw - C++
Объясните пожалуйста разницу. Желательно с примерами, например деление на ноль, ну или чтобы было сразу несколько исключений. Расскажите...

try, catch, throw - C++
пишу класс namespace mystd { const uint32_t def_size = 1 &lt;&lt; 20; //default memory container template&lt;typename T&gt; ...

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

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

если убрать throw, то никогда не выполниться catch...а мне нужно что бы он вызывался, когда ввели больше 10 символов...
0
NoMasters
Псевдослучайный
1764 / 1107 / 73
Регистрация: 13.09.2011
Сообщений: 3,143
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Эксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,849
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
Пес войны
75 / 86 / 3
Регистрация: 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Эксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,849
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! - C++
Добрый вечер! И СНОВА с вами try..catch...:p Я очень долго пытался понять try-catch сам, читал везде, где только можно(ссылки давать...

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

C++ try catch throw в разных функциях - C++
try и catch находятся в одной функции а throw вызывается из другой. ну MVS выкидывает исключение вместо передачи управления. что делать?...

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


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

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

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