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

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

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

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

19.08.2013, 13:15. Просмотров 1201. Ответов 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 - не работает.

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

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

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

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

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

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

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

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

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

почитай еще раз внимательно, для чего придумана парадигма try-catch, и не выкручивай руки с++
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
19.08.2013, 13:43     Конструкция try . catch #5
Цитата Сообщение от novi4ok Посмотреть сообщение
почитай еще раз внимательно, для чего придумана парадигма try-catch, и не выкручивай руки с++
Эм, а для чего еще, если не для обработки ошибок?
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
19.08.2013, 13:48     Конструкция try . catch #6
Цитата Сообщение от fasked Посмотреть сообщение
Эм, а для чего еще, если не для обработки ошибок?
именно. осмелюсь сказать точнее: для разделения когда логики программы и кода обработки ошибочных ситуаций. а товарищ пытается строить с помощью этой конструкции логику программы.
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 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
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
19.08.2013, 14:46     Конструкция try . catch #9
eXtream, это расширение Microsoft. В стандартном C++ такого нет.
Croessmah
Модератор
Эксперт CЭксперт С++
13051 / 7314 / 814
Регистрация: 27.09.2012
Сообщений: 18,051
Записей в блоге: 3
Завершенные тесты: 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
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
19.08.2013, 22:06     Конструкция try . catch #17
Цитата Сообщение от novi4ok Посмотреть сообщение
почитай еще раз внимательно, для чего придумана парадигма try-catch, и не выкручивай руки с++

Не по теме:

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

novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
24.08.2013, 23:13     Конструкция try . catch #18
что такое возобновляемое исключение?
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 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
Еще ссылки по теме:

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

try-catch - C++
Доброго времени суток, начал изучать исключения, и вот есть такой код: // new.cpp : Defines the entry point for the console...

Конструкция SWITCH - C++
Как с помощью switch cоеденить вот эти две программы #include&lt;iostream.h&gt; #include&lt;conio.h&gt; void main() { int...

Что за конструкция? - C++
Доброго времени суток. Встречал где-то конструкцию типа for(;;) { тыры-пыры; } В общем, без указания параметров цикла. Встречал...

Конструкция в условии - C++
if(a==b==c==5) Такая конструкции будет работать без сбоев? А то компилятор делает предупреждение.


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

Или воспользуйтесь поиском по форуму:
novi4ok
551 / 504 / 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
Ответ Создать тему
Опции темы

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