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

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

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

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

19.08.2013, 13:15. Просмотров 1250. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конструкция try . catch (C++):

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

конструкция - C++
Доброго времени суток, с с++ мало знаком не могли бы пояснить некоторые моменты кода. #include &lt;math.h&gt; void tred2(float **a,...

Конструкция if.. - C++
Помогите пожалуйста довести задачу до конца! Дано натуральное число N. Если оно делится на 4, вывести на экран ответ N=4k (где k –...

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

try . catch - C++
можно ли провести данную операцию для функции erase у вектора??? пытался, что-то не получилось: #include &lt;vector&gt; #include &lt;algorithm&gt; ...

TRY/CATCH - C++
Здравствуйте! У меня есть: MASS; для простоты пояснения, x=rand();y=rand(),znacheniye=rand(); Как игнорировать ошибки...

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
Эксперт С++
4945 / 2525 / 180
Регистрация: 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 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
19.08.2013, 13:33 #4
ты пытаешься использовать инструменты не по назначению. если плоскогубцами тоже можно забить гвоздь или закрутить гайку, то это не значит, что так хорошо, и так нужно делать. гвозди нужно забивать молотком, а гайки крутить гаечным ключом.

почитай еще раз внимательно, для чего придумана парадигма try-catch, и не выкручивай руки с++
0
fasked
Эксперт С++
4945 / 2525 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
19.08.2013, 13:43 #5
Цитата Сообщение от novi4ok Посмотреть сообщение
почитай еще раз внимательно, для чего придумана парадигма try-catch, и не выкручивай руки с++
Эм, а для чего еще, если не для обработки ошибок?
0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
19.08.2013, 13:48 #6
Цитата Сообщение от fasked Посмотреть сообщение
Эм, а для чего еще, если не для обработки ошибок?
именно. осмелюсь сказать точнее: для разделения когда логики программы и кода обработки ошибочных ситуаций. а товарищ пытается строить с помощью этой конструкции логику программы.
0
fasked
Эксперт С++
4945 / 2525 / 180
Регистрация: 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
Эксперт С++
4945 / 2525 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
19.08.2013, 14:46 #9
eXtream, это расширение Microsoft. В стандартном C++ такого нет.
0
Croessmah
Эксперт CЭксперт С++
13506 / 7664 / 866
Регистрация: 27.09.2012
Сообщений: 18,850
Записей в блоге: 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
19.08.2013, 15:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.08.2013, 15:38
Привет! Вот еще темы с ответами:

Try catch - C++
try { throw pDoc-&gt;C; } catch (City) { return; } есть динамический City* C, ему присвается значение другого такого...

try catch - C++
Здравствуйте. В c++ новичёк, с try catch никогда толком не работал, а тут пришлось. Нужно сделать защиту от ввода всего кроме цифр. вот...

Try и catch - C++
Пытался сделать простую структуру,чтобы в блоке try задавалось значение переменной x, и если это значение равно,например, 5,то блок catch...

try-catch - C++
Читаю книгу Страуструпа. Он пишет (стр 232), что можно не передавать обработчику исключений какое либо значение. #include...


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

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

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