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

Конструкция try . catch - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Makeda
0 / 0 / 0
Регистрация: 15.05.2012
Сообщений: 75
19.08.2013, 13:15     Конструкция try . catch #1
Здравствуйте.

Подскажите, как продолжить работу программи после обнаружения ошибки конструкцией try ... catch.

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <iostream>
#include <iomanip>
using namespace std;
 
int number;
int counter = 0;
int low, high;
 
int main ()
{
    
    cout << setw (60) << " <<<<<<<<<< This program generates fifty decimal numbers which you can convert to binary >>>>>>>>>> \n\n " << endl;
                
 
    try {
           // again:    
 
            cout << setw (55) << " <<<<<Enter number range >>>>> \n " << endl;
            cout << setw (10) << " The lower bound:" ;
            cin >> low;
 
            cout << setw (10) << " The upper bound:"  ;
            cin >> high;
     
            if ( high < low) throw "You upper bound smaller than lower bound"; 
                
            if ( high <= 0 || low < 0) throw "You should use positive number"; 
                
            if ( high > 1023) throw "You range couldn't exceed 1023!"; 
                
 
          while (counter != 50)
         {
                                
               number = rand() % (high - low)  + low ;
               counter ++; 
 
               if (counter % 10 == 0)
        
                  cout << number << endl;
 
               else
 
                  cout << number << "\t";
              }
 
    }     
 
    catch (const char *err) 
         {
            cerr << err << endl;
           // goto again;
         }
    
    return 0;
}
Хочу что бы после ошибочного ввода, пользователю предлагалось заново ввести диапазон чисел. Пробовал через конструкцию goto - не работает.

Заранее благодарю за ответы.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.08.2013, 13:15     Конструкция try . catch
Посмотрите здесь:

C++ Конструкция if..
C++ Не работает конструкция с new
C++ конструкция
C++ Конструкция
C++ Что за конструкция?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
baur777
6 / 2 / 0
Регистрация: 30.07.2013
Сообщений: 34
19.08.2013, 13:25     Конструкция try . catch #2
можно добавить логическую переменную скажем isCorrect, и цикл под это переменную типа:
bool isCorrect = false;
do
{ try
{
.....
isCorrect=true;
}

catch
{...
isCorrect=false;
}
}while(!isCorrect)
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
19.08.2013, 13:30     Конструкция try . catch #3
C++
1
2
3
4
5
6
7
8
9
10
11
    bool is_error = false;
    do {
        try {
            // ...
        }
        catch (...) {
            is_error = true;
            continue;
        }
        is_error = false;
    } while (is_error);
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
19.08.2013, 13:33     Конструкция try . catch #4
ты пытаешься использовать инструменты не по назначению. если плоскогубцами тоже можно забить гвоздь или закрутить гайку, то это не значит, что так хорошо, и так нужно делать. гвозди нужно забивать молотком, а гайки крутить гаечным ключом.

почитай еще раз внимательно, для чего придумана парадигма try-catch, и не выкручивай руки с++
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
19.08.2013, 13:43     Конструкция try . catch #5
Цитата Сообщение от novi4ok Посмотреть сообщение
почитай еще раз внимательно, для чего придумана парадигма try-catch, и не выкручивай руки с++
Эм, а для чего еще, если не для обработки ошибок?
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
19.08.2013, 13:48     Конструкция try . catch #6
Цитата Сообщение от fasked Посмотреть сообщение
Эм, а для чего еще, если не для обработки ошибок?
именно. осмелюсь сказать точнее: для разделения когда логики программы и кода обработки ошибочных ситуаций. а товарищ пытается строить с помощью этой конструкции логику программы.
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
19.08.2013, 13:49     Конструкция try . catch #7
novi4ok, а можете привести пример правильного применения try-catch?
eXtream
24 / 24 / 0
Регистрация: 10.03.2010
Сообщений: 161
19.08.2013, 14:38     Конструкция try . catch #8
для повторного выполнения кода нужно использовать конструкцию __try _except
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
19.08.2013, 14:46     Конструкция try . catch #9
eXtream, это расширение Microsoft. В стандартном C++ такого нет.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11840 / 6819 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
19.08.2013, 14:47     Конструкция try . catch #10
Цитата Сообщение от eXtream Посмотреть сообщение
нужно использовать конструкцию __try _except
И даже подчеркивания ни о чем не говорят?
eXtream
24 / 24 / 0
Регистрация: 10.03.2010
Сообщений: 161
19.08.2013, 14:56     Конструкция try . catch #11
По моему здесь не стоит вопрос использовать расширения или нет. Нужно решить проблему а __try __except это вариант.
Croessmah
19.08.2013, 15:00
  #12

Не по теме:

Цитата Сообщение от eXtream Посмотреть сообщение
По моему здесь не стоит вопрос использовать расширения или нет.
Зато здесь не сказано, что нужно расширение от мелкософта, зато ясно сказано
Цитата Сообщение от Makeda Посмотреть сообщение
как продолжить работу программи после обнаружения ошибки конструкцией try ... catch.
Цитата Сообщение от eXtream Посмотреть сообщение
Нужно решить проблему а __try __except это вариант.
И опять же
Цитата Сообщение от fasked Посмотреть сообщение
это расширение Microsoft. В стандартном C++ такого нет.
а где упоминания о мелкософте у ТС?

eXtream
24 / 24 / 0
Регистрация: 10.03.2010
Сообщений: 161
19.08.2013, 15:04     Конструкция try . catch #13
Дя я согласен что забежал вперед и теперь вопрос какой компилятор вы используете?
fasked
19.08.2013, 15:11
  #14

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
а где упоминания о мелкософте у ТС?
В данном разделе всегда было принято обсуждать именно стандартный C++. Для всего остального есть Visual C++, Borland C++, etc. Возможно, времена уже не те

Makeda
0 / 0 / 0
Регистрация: 15.05.2012
Сообщений: 75
19.08.2013, 15:38  [ТС]     Конструкция try . catch #15
Всем спасибо, как "выйти" из конструкции catch я понял, можно использовать оператор continue и цикл.

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
29
30
31
32
33
34
bool is_error = true;
 
int main ()
{
    
    cout << setw (30) << "< This program generates fifty decimal numbers which you can convert to binary >\n\n " << endl;
 
    while (is_error == true) {
 
       try {
           
            cout << setw (55) << " <<<<<Enter number range >>>>> \n " << endl;
            cout << setw (10) << " The lower bound:" ;
            cin >> low;
 
            cout << setw (10) << " The upper bound:"  ;
            cin >> high;
     
            if ( high < low) throw "You upper bound smaller than lower bound"; 
                
            if ( high <= 0 || low < 0) throw "You should use positive number"; 
                
            if ( high > 1023) throw "You range couldn't exceed 1023!"; 
                
             }
                    catch (const char *err) 
                    {
                    cerr << err << endl;
                                continue;
                                        
                    }                 
          
        is_error = false;      
        }
P.S. Пишу в VS.
Croessmah
19.08.2013, 15:42
  #16

Не по теме:

Цитата Сообщение от fasked Посмотреть сообщение
В данном разделе всегда было принято обсуждать именно стандартный C++.
Ну так поэтому я и задал вопрос

OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
19.08.2013, 22:06     Конструкция try . catch #17
Цитата Сообщение от novi4ok Посмотреть сообщение
почитай еще раз внимательно, для чего придумана парадигма try-catch, и не выкручивай руки с++

Не по теме:

Ящитаю, реализация исключений в Плюсах ущербна, потому что требует мгновенного раскручивания стека до обработчика. Кто нибудь может сказать, почему решили именно так? Почему нет возобновляемых исключений? Этому есть какие-либо другие обоснования кроме "не нужно" и "никогда не задумывались"? (No offence intended, вопрос к аудитории.)

novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
24.08.2013, 23:13     Конструкция try . catch #18
что такое возобновляемое исключение?
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
24.08.2013, 23:46     Конструкция try . catch #19
novi4ok, OhMyGodSoLong, примерно о такой идее Александреску рассказывает в этом видео (слайды); смотреть про Expected<T>.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2013, 01:06     Конструкция try . catch
Еще ссылки по теме:

C++ Интересная конструкция в C++
Конструкция в условии C++
Конструкция SWITCH C++

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

Или воспользуйтесь поиском по форуму:
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
25.08.2013, 01:06     Конструкция try . catch #20
Цитата Сообщение от fasked Посмотреть сообщение
novi4ok, OhMyGodSoLong, примерно о такой идее Александреску рассказывает в этом видео (слайды); смотреть про Expected<T>.
проблему можно изложить в нескольких хорошо сформулированных фразах. ты уверен, что хочешь, чтобы я смотрел это полуторачасовое зарабатывание денег лектором? ты сам просмотрел это все и что-то полезное оттуда унес?
Yandex
Объявления
25.08.2013, 01:06     Конструкция try . catch
Ответ Создать тему
Опции темы

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