2014-01-07 4 views
3

Не имеет значения, поставил ли я Y или N, моя программа заканчивается после того, как я отвечу «Больше мяса?». Я ожидаю, что он вернет ответ на цикл.Почему мой цикл while заканчивается?

#include <iostream> 
using namespace std; 
int main() 
{ 
    char response = 'y'; 
    double price; 
    double total = 0; 
    while (response == 'Y' || 'y') { 

     cout << "Please enter price of meat: "; 
     cin >> price; 

     total += price; 

     cout << "More meat? (Y/N)"; 
     cin >> response; 
     return response; 
    } 
    cout << "Your total is: " << total; 

    return 0; 

} 
+3

(ответ == 'Y' || 'y') должен быть (ответ == 'Y' || response == 'y') –

ответ

7
while (response == 'Y' || 'y') { 

должно быть

while (response == 'Y' || response == 'y') { 

Также

return response; 

выходит всю функцию (main). Вам это не нужно.


Я ожидал, что это возвращает ответ на петле

Вам не нужно (return используется для возвращения значения из функции, прекращения его исполнения). Итак, после } цикла, следующая выполненная строка будет while (condition) .... Если condition оценивается до false, цикл останавливается, и следующая выполненная строка будет следующей после } цикла.

+0

По иронии судьбы условие цикла while не имеет отношения к тому, почему оно выходит из условие, как написано, представляет собой цикл while (true). Ответ «return» - это реальный ответ. – Mgetz

+0

@Mgetz - правда, но все же обе вещи являются проблемой :) –

2

Ваши отступы сломаны, как ваш while() тест и у вас есть паразитное return заявления:

#include <iostream> 
using namespace std; 
int main() 
{ 

    char response = 'y'; 
    double price; 
    double total = 0; 
    while (response == 'Y' || response == 'y') { 

     cout << "Please enter price of meat: "; 
     cin >> price; 

     total += price; 

     cout << "More meat? (Y/N)"; 
     cin >> response; 
    } // end while 
    cout << "Your total is: " << total; 

    return 0; 
} // end main() 

(Использование do ... while() будет немного аккуратнее, а также вам не нужно инициализировать response в 'y') ,

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