1 / 0 / 1
Регистрация: 14.12.2013
Сообщений: 32
1

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

18.06.2014, 12:36. Показов 626. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.06.2014, 12:36
Ответы с готовыми решениями:

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

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

Исключительные ситуации
Функция должна выполнять проверку параметров, передаваемых и генерировать исключения в случае...

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

9
6042 / 2157 / 753
Регистрация: 10.12.2010
Сообщений: 6,007
Записей в блоге: 3
18.06.2014, 13:48 2
Цитата Сообщение от Grraf Посмотреть сообщение
после такого ввода программа зацикливается
Так вы входной поток и не почистили. Вот оно у вас и крутится по вашему goto.

Не по теме:

goto -- зло :rtfm::wall:

1
1 / 0 / 1
Регистрация: 14.12.2013
Сообщений: 32
18.06.2014, 13:52  [ТС] 3
goto тут не причем. Я и без него пробовал и с ним пробовал. Все равно зацикливается.
0
Модератор
Эксперт С++
12088 / 9763 / 5906
Регистрация: 18.12.2011
Сообщений: 26,213
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
6042 / 2157 / 753
Регистрация: 10.12.2010
Сообщений: 6,007
Записей в блоге: 3
18.06.2014, 14:42 5
Цитата Сообщение от Grraf Посмотреть сообщение
goto тут не причем
А я не сказал, что goto конкретный виновник. Я сказал, что ваше зацикливание идет по goto-кругу. А происходит оно потому что
Цитата Сообщение от HighPredator Посмотреть сообщение
вы входной поток и не почистили
0
1 / 0 / 1
Регистрация: 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
Модератор
Эксперт С++
12088 / 9763 / 5906
Регистрация: 18.12.2011
Сообщений: 26,213
18.06.2014, 15:10 7
Цитата Сообщение от Grraf Посмотреть сообщение
не помогло(
А ctrl+Z нажимаете в конце ввода?
0
6042 / 2157 / 753
Регистрация: 10.12.2010
Сообщений: 6,007
Записей в блоге: 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;
}
0
1 / 0 / 1
Регистрация: 14.12.2013
Сообщений: 32
18.06.2014, 15:48  [ТС] 9
Цитата Сообщение от zss Посмотреть сообщение
А ctrl+Z нажимаете в конце ввода?
Я ввожу по одному символу, и после каждого нажимаю enter. Как только і=n программа выходит из цикла и выводит на экран массив, при условии, что не ввел чаровий символ. Введение чарового символа и вызывает зацикленность
0
0 / 0 / 1
Регистрация: 30.12.2012
Сообщений: 88
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.10.2014, 21:20
Помогаю со студенческими работами здесь

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

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru