2016-06-07 2 views
2

Я пытаюсь написать программу, которая может рассчитать будущий день, введя сегодня и количество прошедших дней. По большей части это работает. Однако я наткнулся на крошечную проблему, и я застрял с ней в течение последнего часа.По умолчанию закрытие внутреннего переключателя

do 
{ 
    cout << "To begin, enter today's day: " << endl << "0. Sunday" << endl << "1. Monday" << endl << "2. Tuesday" << endl << "3. Wednesday" << endl << "4. Thursday" << endl << "5. Friday" << endl << "6. Saturday" << endl; 
    cin >> num1; 

    while (num1 < 0 || num1 > 6) 
    { 
     cout << "The number must be in the range 0 to 6.\n"; 
     cout << "Please try again: "; 
     cin >> num1; 
    } 

    cout << "Enter number of days elapsed after today: "; 
    cin >> numdays; 

    if (num1 == 0) { today = "Sunday"; } 
    ... /* Similar cases from 1 - 5 */ 
    if (num1 == 6) { today = "Saturday"; } 

    n = numdays % 7; 

    switch (n) 
    { 
     case 0: cout << "Today is " << today << " and " << num1 << " days from now is Sunday" << endl; 
      break; 
     ... /* Similar cases from 1 - 5 */ 
     case 6: cout << "Today is " << today << " and " << num1 << " days from now is Saturday" << endl; 
      break; 
     default: cout << "Please enter a valid response" << endl; 
    } 

    cout << "Press R to try again" << endl; //Prompts the user to try again 
    cin >> response; 
    system("cls"); 
} while (response == 'R' || response == 'r'); 

Вот его часть. Как вы можете видеть, моя программа должна спросить пользователя, хочет ли он повторить попытку. Он работает почти для всех, но по умолчанию в коммутаторе, он сразу закрывается, а не спрашивает меня, хочу ли я попробовать еще раз. Есть ли у меня какое-то заблуждение или что?

+0

После того, как я заполняю, что осталось из я не в состоянии воспроизвести. Хорошие шансы Я делаю разные предположения о типах переменных, чем вы. – user4581301

ответ

2

Если при подаче ввода для вашего numdays присутствует некоторый символ конца, его можно прочитать в response. Вы можете подтвердить это, напечатав значение ascii response.

Чтобы преодолеть эту проблему, выполните следующие действия перед чтением в ответ:

cin.ignore(256,'\n'); /* Ignore any lingering characters */ 
cout << "Press R to try again" << endl; 
cin >> response; 

Дальнейшее чтение: Why would we call cin.clear() and cin.ignore() after reading input?

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