2015-01-03 4 views
-3

Почему этот цикл не работает? Он создает ошибку сегментации, когда ответ не является y или n, но я думал, что справился с проблемой, и это не сработало. Как я могу это исправить, так что ошибка сегментации прекращается? Я смущен, почему это не сработает.Почему этот цикл не работает?

int main() 
{ 
    string yes = "y"; 
    string uyes = "Y"; 
    string no = "n"; 
    string uno = "N"; 
    string answer = " ";  
    do 
    { 
     system("CLS"); 
     cout << "Welcome to the Red Fern Shipping Company where we ship your packages your way!\n"; 
     cout << "Do you want to ship a parcel? Y or N?\n"; 
     cin >> answer; 
     do 
     { 
      if (answer == no || answer == uno) 
      { 
       cout << "Thank you! Come again!\n"; 
       system("PAUSE"); 
       return 0; 
      } 
      else if (answer == yes || answer == uyes) 
      { 
       break; 
      } 
      else 
      { 
       cin.clear(); 
       cin.sync(); 
       cout << "That answer is invalid and cannot work. Please enter a 'y' for yes or 'n' for no.\n"; 
      } 
     } while (answer != yes && answer != uyes && answer != no && answer != uno); 

    } while (answer == yes || answer == uyes); 
    system("PAUSE"); 
    return 0; 
} 
+3

«Как я могу это исправить?» Используйте отладчик – bolov

+0

@MichielUitHetBroek Brilliant! Не могу поверить, что я пропустил это ... ха-ха спасибо! – justyournormalguy13

+1

@ justyournormalguy13 действительно вам следует научиться использовать отладчик. Вы бы нашли ошибку в кратчайшие сроки. Это сэкономит вам много и много часов царапин на голове и задает вопросы о SO, которые закрыты и закрыты. ** Научитесь использовать отладчик ** – bolov

ответ

2

Значение «ответ» воли навсегда быть неравным да/нет, если это когда-то так «CIN >> ответ» не указано во внутреннем сделай время.

1

Проблема заключается в том, что внутренний цикл бесконечен

 do 
     { 
      if (answer == no || answer == uno) 
      { 
       cout << "Thank you! Come again!\n"; 
       system("PAUSE"); 
       return 0; 
      } 
      else if (answer == yes || answer == uyes) 
      { 
       break; 
      } 
      else 
      { 
       cin.clear(); 
       cin.sync(); 
       cout << "That answer is invalid and cannot work. Please enter a 'y' for yes or 'n' for no.\n"; 
      } 
     } while (answer != yes && answer != uyes && answer != no && answer != uno); 

Внутри цикла переменная ответа не получает возобновлен. Вы должны указать заявление

std::cin >> answer; 

внутри этого внутреннего контура.

Я бы разместил все операторы if, кроме одного вне внутреннего контура. Например,

 bool valid_answer; 
     do 
     { 
      cin >> answer; 

      valid_answer = answer == yes || answer == uyes || 
            answer == no || answer == uno; 
      if (!valid_answer) 
      { 
       cin.clear(); 
       cin.sync(); 
       cout << "That answer is invalid and cannot work. Please enter a 'y' for yes or 'n' for no.\n"; 
      } 
     } while (!valid_answer); 


    if (answer == no || answer == uno) 
    { 
     cout << "Thank you! Come again!\n"; 
     system("PAUSE"); 
     return 0; 
    } 
Смежные вопросы