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

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

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

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

18.06.2014, 12:36. Просмотров 407. Ответов 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();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2014, 12:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Исключительные ситуации (C++):

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

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

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

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

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

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

9
HighPredator
5544 / 1857 / 346
Регистрация: 10.12.2010
Сообщений: 5,479
Записей в блоге: 2
18.06.2014, 13:48 #2
Цитата Сообщение от Grraf Посмотреть сообщение
после такого ввода программа зацикливается
Так вы входной поток и не почистили. Вот оно у вас и крутится по вашему goto.

Не по теме:

goto -- зло

1
Grraf
1 / 0 / 0
Регистрация: 14.12.2013
Сообщений: 32
18.06.2014, 13:52  [ТС] #3
goto тут не причем. Я и без него пробовал и с ним пробовал. Все равно зацикливается.
0
zss
Модератор
Эксперт С++
6539 / 6101 / 2010
Регистрация: 18.12.2011
Сообщений: 15,876
Завершенные тесты: 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";
0
HighPredator
5544 / 1857 / 346
Регистрация: 10.12.2010
Сообщений: 5,479
Записей в блоге: 2
18.06.2014, 14:42 #5
Цитата Сообщение от Grraf Посмотреть сообщение
goto тут не причем
А я не сказал, что goto конкретный виновник. Я сказал, что ваше зацикливание идет по goto-кругу. А происходит оно потому что
Цитата Сообщение от HighPredator Посмотреть сообщение
вы входной поток и не почистили
0
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 Посмотреть сообщение
вы входной поток и не почистили
как почистить входной поток??
0
zss
Модератор
Эксперт С++
6539 / 6101 / 2010
Регистрация: 18.12.2011
Сообщений: 15,876
Завершенные тесты: 1
18.06.2014, 15:10 #7
Цитата Сообщение от Grraf Посмотреть сообщение
не помогло(
А ctrl+Z нажимаете в конце ввода?
0
HighPredator
5544 / 1857 / 346
Регистрация: 10.12.2010
Сообщений: 5,479
Записей в блоге: 2
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;
}
0
Grraf
1 / 0 / 0
Регистрация: 14.12.2013
Сообщений: 32
18.06.2014, 15:48  [ТС] #9
Цитата Сообщение от zss Посмотреть сообщение
А ctrl+Z нажимаете в конце ввода?
Я ввожу по одному символу, и после каждого нажимаю enter. Как только і=n программа выходит из цикла и выводит на экран массив, при условии, что не ввел чаровий символ. Введение чарового символа и вызывает зацикленность
0
jekmut
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 84
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;
  }
}
0
15.10.2014, 21:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2014, 21:20
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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