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

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

Восстановить пароль Регистрация
 
Grraf
1 / 0 / 0
Регистрация: 14.12.2013
Сообщений: 32
18.06.2014, 12:36     Исключительные ситуации #1
Надо сделать так, чтоб при вводе чарового символа в итовый вектор выводило сообщение об ошибке, но программа не закрывалась, а просто игнорировала этот символ. Проблема в том что после такого ввода программа зацикливается.
Вот мой фрагмент кода:
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++
C++ исключительные ситуации
Препроцессор,исключительные ситуации C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HighPredator
 Аватар для HighPredator
5342 / 1725 / 320
Регистрация: 10.12.2010
Сообщений: 5,109
Записей в блоге: 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
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,164
Завершенные тесты: 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
 Аватар для HighPredator
5342 / 1725 / 320
Регистрация: 10.12.2010
Сообщений: 5,109
Записей в блоге: 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
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,164
Завершенные тесты: 1
18.06.2014, 15:10     Исключительные ситуации #7
Цитата Сообщение от Grraf Посмотреть сообщение
не помогло(
А ctrl+Z нажимаете в конце ввода?
HighPredator
 Аватар для HighPredator
5342 / 1725 / 320
Регистрация: 10.12.2010
Сообщений: 5,109
Записей в блоге: 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++
C++ Исключительные ситуации
C++ Исключительные ситуации!

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

Или воспользуйтесь поиском по форуму:
jekmut
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 54
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     Исключительные ситуации
Ответ Создать тему
Опции темы

Текущее время: 12:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru