Программа всегда генерирует исключение, даже если введено правильное значение - PullRequest
1 голос
/ 29 мая 2020

У меня есть эта программа, в которой я генерирую исключение, если введенный char не является 'a', 'b', 'c', он выдает исключение с сообщением "Вы не можете ввести ничего, кроме a, b, c ". Но это не работает так, что всегда генерирует исключение, даже если я ввожу a, b, c. Теперь мой вопрос: что мне делать, если я ввожу a, b, c программа продолжает работать и не генерирует это исключение? Код:

int pitanjca()
  {
    cout<<endl;
    cout<<endl;
    cout<<endl;
    cout<<endl;
    cout<<endl;
    cout<<ime11<<" i  "<<ime22<<" sada započinjemo igru."<<endl;
    //Another question:
    cout<<"Pocinjemo sa pitanjima: "<<endl;
    cout<<"1.Kada je rođen Josip Broz Tito?";
    cout<<"a)7 maja 1892."<<endl;
    cout<<"b)25 maja 1892."<<endl;
    cout<<"c)25 maja 1900."<<endl;
    cout<<"Unesite odgovor: ";
    cin>>odgovor1;
    if(odgovor1!='a' || odgovor1!='b' || odgovor1!='c')
    {
      throw "Ne mozete unijeti nista osim a,b ili c";
    }
    cout<<endl;
    if(odgovor1=='a')
    {
      bodovi+=5;
    }
    else
    {
      bodovi+=0;
    }

основная функция:

 pitanja p(ime1,ime2);
  cout<<"Prvi igra: "<<ime1<<endl;
  try{
  player1bodovi=p.pitanjca();
  }catch (const char* msg) {
     cerr << msg << endl;
     goto tt;
  }

И tt выглядит так:

system("PAUSE")
return 0;

1 Ответ

4 голосов
/ 29 мая 2020
if (odgovor1 != 'a' || odgovor1 != 'b' || odgovor1 != 'c')

Это должны быть операторы &&. Подумайте, что происходит, когда вы вводите a. Вы получите:

false || true || true

, что равно true. Фактически, вы получите истинное значение для каждого символа, поскольку один символ не может быть одновременно всеми a, b и c.


Однако, вероятно, нет необходимости в отделении логики подсчета очков c от логики проверки c, вы можете объединить эти два значения примерно таким:

switch (odgovor1) {
    case 'a': bodovi += 5; break;
    case 'b':
    case 'c': break;
    default : throw "Ne mozete unijeti nista osim a, b ili c";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...