2016-12-04 2 views
0

Я пытаюсь устранить бесконечный цикл, используя обработку исключений в моем коде, но не работает, может кто-то взглянуть на этот фрагмент и сказать мне, что я «Неправильно?C++ Как выполнять обработку исключений в цикле while для получения ошибок ввода?

void Addition(float num) 
 
\t { 
 
\t \t 
 
\t \t cout<<"Please enter number you wish to add:"<<endl; 
 
\t \t cin>>num; 
 
\t \t 
 
\t \t while(num!=-9999) 
 
\t \t { 
 
\t \t \t Sum+=num; 
 
\t \t \t cout<<"Sum is:"<<Sum<<endl; 
 
\t \t \t cout<<"Please enter number or enter -9999 to exit"<<endl; 
 
\t \t \t try{ 
 
\t \t \t \t cin>>num; 
 
\t \t \t } 
 
\t \t \t catch(...) 
 
\t \t \t {cout<<"ERROR"<<endl; 
 
\t \t \t } 
 
\t \t 
 
\t \t \t 
 
\t \t } 
 
\t \t 
 
\t \t 
 
\t }

+1

Добавьте 'num = -9999;' в конец, но внутри, блок catch. Или просто распечатайте сообщение, в котором говорится, если вы хотите выйти из входа. -9999 – doug

+0

Исключение попадает внутри цикла while, и выполнение просто продолжается. Если вы хотите, чтобы исключение прерывало цикл while, вы должны иметь try/catch вне цикла. Весь цикл 'while' должен находиться внутри блока' try'. –

+0

Попробуйте и не используйте * магические числа *, как это. Что делать, если кому-то нужно добавить '-9999' к сумме? Вот что означает сигнал 'eof()'. – tadman

ответ

1

исключения перехватываются только если они выбрасываются первым. Никакая часть вашего кода не вызывает каких-либо исключений, используя ключевое слово throw. Но даже если вы сделаете это ваш catch блок должен быть в курсе, а поэтому вы должны выйти из цикла с помошью break заявление, если это ваше намерение

Вы можете сделать следующее

void Addition(float num) 
    { 
     int Sum=0; 
     cout<<"Please enter number you wish to add:"<<endl; 
     cout<<"Please enter number or enter -9999 to exit"<<endl; 

     while(true) // whcih actually makes it infinite 
     { 
      try{ 
       cin>>num; 
       if(num == -9999) 
        throw -9999; // you can throw any value in this case 
       Sum+=num; 
      } 
      catch(...) 
      { 
      cout <<" ABORTING.."<<endl; 
      break; 
      } 
     } 

     cout << "Sum is:" << Sum << endl; 
    } 

выше код совершенно необязательно, это могло бы быть сделано так:

void Addition(float num) 
     { 
      int Sum=0; 
      cout<<"Please enter number you wish to add:"<<endl; 
      cout<<"Please enter number or enter -9999 to exit"<<endl; 

      while(true) // whcih actually makes it infinite 
      { 

        cin>>num; 
        if(num == -9999) 
        { 
         cout << "ABORTING.." << endl; 
         break; 
        } 

        Sum+=num; 
      } 

      cout << "Sum is:" << Sum << endl; 
     } 
+1

Еще лучше: 'while (std :: cin >> num && num! = -9999)'. –

Смежные вопросы