2015-04-28 3 views
0

Я пытаюсь использовать try, throw and catch в куске кода, чтобы проверить, хороший ли вход. Это то, что у меня есть до сих пор;Как использовать try, throw и catch?

while(loop > 0){ 
    try{ 
     cout << "Please input the x and y centre point: separated by a space" << endl; 
     cin >> Cx >> Cy; 
     if(isalpha(Cx)){cin.clear(); cin.ignore();throw 1;} 
     if(isalpha(Cy)){cin.clear(); cin.ignore();throw 2;} 

     cout << "Please input the side length" << endl; 
     cin >> side1; 
     if(isalpha(side1)){cin.clear(); cin.ignore();throw 3;} 
     if(side1 <= 0){cin.clear(); cin.ignore();throw 4;} 

     loop = 0; 
    } 
    catch(int err){ 
     if(err == 1){cout << "X center co-ordinate should be a number" << endl;} 
     if(err == 2){cout << "Y center co-ordinate should be a number" << endl;} 
     if(err == 3){cout << "The length should be a number" << endl;} 
     if(err == 4){cout << "The length should be greater than 0" << endl;} 
    } 
} 

Когда я запускаю это и введите o 0 для центральной точки программа по-прежнему выводит Please input the side length, а затем The length should be greater than 0 и, наконец, возвращается назад, чтобы попросить новую точку центра.

Как это изменить, чтобы правильно считывать сообщение об ошибке до линии боковой длины (в идеале линия боковой длины не выводится)?

Благодаря

Я новичок в использовании try, throw and catch и от того, что я прочитал это не может быть правильным применение его, но я просто хочу попробовать его.

+0

какой язык программирования вы используете? – MZaragoza

+1

Можете ли вы написать название вопроса, которое лучше отражает то, что вы просите? – djechlin

+4

Есть причина, почему их называют исключениями. Если вам нужно обрабатывать типы (-ы) исключений, которые выходят из-под вашего контроля/ожидания, тогда вы будете использовать try/catch. Это не относится к проверке ввода пользователя, потому что вы можете ожидать, что они будут вводить, действительны или иначе. Просто напишите процедуру проверки с возвратом сообщения/кода ошибки. –

ответ

0

Поскольку вы не предоставили текущий код или любую отладочную информацию, мы вынуждены угадывать (и сами писать программу). См. Ниже, который отлично работает под cygwin 4.9.2/Windows 7. Измените свою программу, чтобы сопоставить или опубликовать полный неверный код для другой попытки.

#include <iostream> 
#include <locale> 

using namespace std; 

int main (int argc, char **argv) 
{ 
    int loop = 1; 
    char Cx, Cy; 
    char side1; 
    while(loop){ 
     try{ 
      cout << "Please input the x and y centre point: separated by a space" << endl; 
      cin >> Cx >> Cy; 

      if(isalpha(Cx)){cin.clear(); cin.ignore();throw 1;} 
      if(isalpha(Cy)){cin.clear(); cin.ignore();throw 2;} 

      cout << "Please input the side length" << endl; 
      cin >> side1; 
      if(isalpha(side1)){cin.clear(); cin.ignore();throw 3;} 
      if(side1 <= 0){cin.clear(); cin.ignore();throw 4;} 

      loop = 0; 
     } 
     catch(int err){ 
      if(err == 1){cout << "X center co-ordinate should be a number" << endl;} 
      if(err == 2){cout << "Y center co-ordinate should be a number" << endl;} 
      if(err == 3){cout << "The length should be a number" << endl;} 
      if(err == 4){cout << "The length should be greater than 0" << endl;} 
     } 
    } 
} 
Смежные вопросы