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

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

Войти
Регистрация
Восстановить пароль
 
Grraf
1 / 0 / 0
Регистрация: 14.12.2013
Сообщений: 32
#1

Исключительные ситуации - C++

18.06.2014, 12:36. Просмотров 393. Ответов 9
Метки нет (Все метки)

Надо сделать так, чтоб при вводе чарового символа в итовый вектор выводило сообщение об ошибке, но программа не закрывалась, а просто игнорировала этот символ. Проблема в том что после такого ввода программа зацикливается.
Вот мой фрагмент кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    cout<<"Enter size ";
    int a1;
    cin>>a1;
    VECTOR V1(a1);
    cout<<"Enter vector:\n";
st:
    try
    {
    for(int i=0;i<a1;i++)
    {
        if(cin.fail()) throw "error";
        else cin>>V1[i];
    }
    }
    catch( const char *str)
    {
        cout<<str<<endl;
        goto st;
    }
    V1.menu1();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2014, 12:36     Исключительные ситуации
Посмотрите здесь:

Исключительные ситуации - C++
Функция должна выполнять проверку параметров, передаваемых и генерировать исключения в случае ошибки. Без спецификаторов исключений; ...

Исключительные ситуации - C++
Почему программа не работает?? Исключительная ситуация возникающая при деление на нуль. Пользователь с клавиатуры должен ввести число, если...

исключительные ситуации - C++
почему не работает?? как надо?? #include&lt;iostream&gt; #include&lt;conio.h&gt; using namespace std; template&lt;class T&gt; class Vector...

исключительные ситуации - C++
Описать и реализовать функцию анализа номера телефона, обработайте ошибку создания номера в неверном формате (допустимый формат - +8 (095)...

исключительные ситуации - C++
Подскажите, как сделать переполнение в этой задаче: Создать класс для хранения обыкновенных дробей. Запрограммировать метод сокращения...

Исключительные ситуации - C++
Доброго времени суток. Возникла такая проблема. Никак не могу разобраться с исключительными ситуациями. Вот допустим, как здесь сделать,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HighPredator
5474 / 1840 / 342
Регистрация: 10.12.2010
Сообщений: 5,431
Записей в блоге: 3
18.06.2014, 13:48     Исключительные ситуации #2
Цитата Сообщение от Grraf Посмотреть сообщение
после такого ввода программа зацикливается
Так вы входной поток и не почистили. Вот оно у вас и крутится по вашему goto.

Не по теме:

goto -- зло

Grraf
1 / 0 / 0
Регистрация: 14.12.2013
Сообщений: 32
18.06.2014, 13:52  [ТС]     Исключительные ситуации #3
goto тут не причем. Я и без него пробовал и с ним пробовал. Все равно зацикливается.
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,184
Завершенные тесты: 1
18.06.2014, 14:41     Исключительные ситуации #4
Цитата Сообщение от Grraf Посмотреть сообщение
if(cin.fail()) throw "error";
else cin>>V1[i];
Замените на
C++
1
2
if( !(cin>>V1[i]) ) 
              throw "error";
HighPredator
5474 / 1840 / 342
Регистрация: 10.12.2010
Сообщений: 5,431
Записей в блоге: 3
18.06.2014, 14:42     Исключительные ситуации #5
Цитата Сообщение от Grraf Посмотреть сообщение
goto тут не причем
А я не сказал, что goto конкретный виновник. Я сказал, что ваше зацикливание идет по goto-кругу. А происходит оно потому что
Цитата Сообщение от HighPredator Посмотреть сообщение
вы входной поток и не почистили
Grraf
1 / 0 / 0
Регистрация: 14.12.2013
Сообщений: 32
18.06.2014, 14:59  [ТС]     Исключительные ситуации #6
Цитата Сообщение от zss Посмотреть сообщение
Сообщение от Grraf
if(cin.fail()) throw "error";
else cin>>V1[i];
Замените на
Код C++
1
2
if( !(cin>>V1[i]) )
* * * * * * * throw "error";
не помогло(


Цитата Сообщение от HighPredator Посмотреть сообщение
вы входной поток и не почистили
как почистить входной поток??
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,184
Завершенные тесты: 1
18.06.2014, 15:10     Исключительные ситуации #7
Цитата Сообщение от Grraf Посмотреть сообщение
не помогло(
А ctrl+Z нажимаете в конце ввода?
HighPredator
5474 / 1840 / 342
Регистрация: 10.12.2010
Сообщений: 5,431
Записей в блоге: 3
18.06.2014, 15:23     Исключительные ситуации #8
Вот вам примерчик поиграться:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
int main()
{
  int k;
  for(int i=0;i<10;i++)
  {
    std::cin>>k;
    if (std::cin.fail())
    {
      std::cin.clear();
      std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
    else
    {
      std::cout<<"k="<<k<<std::endl;
      k =0;
    }
  }
  getchar();
  return 0;
}
Grraf
1 / 0 / 0
Регистрация: 14.12.2013
Сообщений: 32
18.06.2014, 15:48  [ТС]     Исключительные ситуации #9
Цитата Сообщение от zss Посмотреть сообщение
А ctrl+Z нажимаете в конце ввода?
Я ввожу по одному символу, и после каждого нажимаю enter. Как только і=n программа выходит из цикла и выводит на экран массив, при условии, что не ввел чаровий символ. Введение чарового символа и вызывает зацикленность
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2014, 21:20     Исключительные ситуации
Еще ссылки по теме:

Исключительные ситуации - C++
Как обработать исключительную ситуацию,когда переменная описана как int,к примеру,а вводится какой-нибудь char?А то нам как то в лекции...

обработать исключительные ситуации - C++
Функция вычисляет корень квадратного уравнения ax2+bx+c=0 Нужно обработать исключительные ситуации

Исключительные ситуации в классах - C++
Добрый день. Нужна помощь, есть класс дробей. В нём я сделал исключительные ситуации для переполенения и для деления на 0. Но надо чтобы...

Препроцессор,исключительные ситуации - C++
Всем доброго времени суток!) По прочтению изложенного в моей книге материала по искл. ситуациям и операторам препроцессора(? так можно...


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

Или воспользуйтесь поиском по форуму:
jekmut
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 82
15.10.2014, 21:20     Исключительные ситуации #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
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
 
void SqrtNum();
 
int main()
{
  setlocale (LC_ALL, "RUS");
  
  try
  {
    SqrtNum();
  }
  catch(string msg)
  {
    cout << "ГЋГёГЁГЎГЄГ*!" << endl;
    cout << msg;
  }
  
  getch();
  return 0;
}
 
void SqrtNum()
{
  double num;
  for(int i = 1; i <= 3; i++)
  {
    string message = "ÎòðèöГ*òåëüГ*îå ÷èñëî!";
    cout << "Enter number " << i << ": ";
    cin >> num;
    if(num <= 0) throw(message);
    cout << sqrt(num) << endl;
  }
}
Yandex
Объявления
15.10.2014, 21:20     Исключительные ситуации
Ответ Создать тему
Опции темы

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