Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
Makeda
0 / 0 / 0
Регистрация: 15.05.2012
Сообщений: 75
#1

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

19.08.2013, 13:15. Просмотров 1351. Ответов 21
Метки нет (Все метки)

Здравствуйте.

Подскажите, как продолжить работу программи после обнаружения ошибки конструкцией 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 - не работает.

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

Конструкция
ребят помогите разобрать конструкцию вида (ah==72)?k--:k; знаю что чтото...

конструкция
Доброго времени суток, с с++ мало знаком не могли бы пояснить некоторые моменты...

Конструкция if..
Помогите пожалуйста довести задачу до конца! Дано натуральное число N. Если...

Try catch
Доброго времени суток нехочу наследовать диалог,тем более что набросал его за...

try-catch
Доброго времени суток, начал изучать исключения, и вот есть такой код: //...

21
baur777
6 / 2 / 0
Регистрация: 30.07.2013
Сообщений: 34
19.08.2013, 13:25 #2
можно добавить логическую переменную скажем isCorrect, и цикл под это переменную типа:
bool isCorrect = false;
do
{ try
{
.....
isCorrect=true;
}

catch
{...
isCorrect=false;
}
}while(!isCorrect)
0
fasked
Эксперт С++
4981 / 2560 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
19.08.2013, 13:30 #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);
0
novi4ok
551 / 504 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
19.08.2013, 13:33 #4
ты пытаешься использовать инструменты не по назначению. если плоскогубцами тоже можно забить гвоздь или закрутить гайку, то это не значит, что так хорошо, и так нужно делать. гвозди нужно забивать молотком, а гайки крутить гаечным ключом.

почитай еще раз внимательно, для чего придумана парадигма try-catch, и не выкручивай руки с++
0
fasked
Эксперт С++
4981 / 2560 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
19.08.2013, 13:43 #5
Цитата Сообщение от novi4ok Посмотреть сообщение
почитай еще раз внимательно, для чего придумана парадигма try-catch, и не выкручивай руки с++
Эм, а для чего еще, если не для обработки ошибок?
0
novi4ok
551 / 504 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
19.08.2013, 13:48 #6
Цитата Сообщение от fasked Посмотреть сообщение
Эм, а для чего еще, если не для обработки ошибок?
именно. осмелюсь сказать точнее: для разделения когда логики программы и кода обработки ошибочных ситуаций. а товарищ пытается строить с помощью этой конструкции логику программы.
0
fasked
Эксперт С++
4981 / 2560 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
19.08.2013, 13:49 #7
novi4ok, а можете привести пример правильного применения try-catch?
0
eXtream
24 / 24 / 0
Регистрация: 10.03.2010
Сообщений: 164
19.08.2013, 14:38 #8
для повторного выполнения кода нужно использовать конструкцию __try _except
0
fasked
Эксперт С++
4981 / 2560 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
19.08.2013, 14:46 #9
eXtream, это расширение Microsoft. В стандартном C++ такого нет.
0
Croessmah
++Ͻ
14487 / 8268 / 1553
Регистрация: 27.09.2012
Сообщений: 20,312
Записей в блоге: 3
Завершенные тесты: 1
19.08.2013, 14:47 #10
Цитата Сообщение от eXtream Посмотреть сообщение
нужно использовать конструкцию __try _except
И даже подчеркивания ни о чем не говорят?
0
eXtream
24 / 24 / 0
Регистрация: 10.03.2010
Сообщений: 164
19.08.2013, 14:56 #11
По моему здесь не стоит вопрос использовать расширения или нет. Нужно решить проблему а __try __except это вариант.
0
Croessmah
19.08.2013, 15:00
  #12

Не по теме:

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

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

Не по теме:

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

1
Makeda
0 / 0 / 0
Регистрация: 15.05.2012
Сообщений: 75
19.08.2013, 15:38  [ТС] #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.
0
Croessmah
19.08.2013, 15:42
  #16

Не по теме:

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

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

Не по теме:

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

0
novi4ok
551 / 504 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
24.08.2013, 23:13 #18
что такое возобновляемое исключение?
0
fasked
Эксперт С++
4981 / 2560 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
24.08.2013, 23:46 #19
novi4ok, OhMyGodSoLong, примерно о такой идее Александреску рассказывает в этом видео (слайды); смотреть про Expected<T>.
1
novi4ok
551 / 504 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
25.08.2013, 01:06 #20
Цитата Сообщение от fasked Посмотреть сообщение
novi4ok, OhMyGodSoLong, примерно о такой идее Александреску рассказывает в этом видео (слайды); смотреть про Expected<T>.
проблему можно изложить в нескольких хорошо сформулированных фразах. ты уверен, что хочешь, чтобы я смотрел это полуторачасовое зарабатывание денег лектором? ты сам просмотрел это все и что-то полезное оттуда унес?
0
25.08.2013, 01:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2013, 01:06

Try-catch
Добрый вечер, #include &lt;iostream&gt; using namespace std; void F1(int);...

Try и catch
Пытался сделать простую структуру,чтобы в блоке try задавалось значение...

try-catch
Какой тип проекта создавать в Visual Studio чтобы можно было сделать обработку...


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

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

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