2015-05-30 3 views
2

Я пишу код, который позволяет пользователю определять прибыль от бизнеса продажи сэндвича. И все же, я сталкиваюсь с проблемами с помощью while().Непонимание цикла while() в C++

int sandwichtype=1; 

cout << "Enter the type of sandwich" << endl 
    << "Input 1 for cheese, 2 for veggie, 3 for customed" << endl << endl 
    << "Sandwich type: "; 

while (sandwichtype > 0 && sandwichtype < 4) 
cin >> sandwichtype; 

То, что я хочу, чтобы ограничить пользователя от ввода любого количества другого из 1, 2 или 3. И все же, когда я компилирую, компилятор делает противоположное. Почему это и каково решение?

+3

Предположим, вам сказали: 'while (вы нашли правильный ответ) {снова решить проблему}'. Разве это не было бы ошибкой? Не должно быть 'while (ваш ответ был не прав) {попробуйте еще раз}'? – rici

ответ

3

Попробуйте следующее

int sandwichtype; 

do 
{ 
    cout << "Enter the type of sandwich" << endl 
     << "Input 1 for cheese, 2 for veggie, 3 for customed" << endl << endl 
     << "Sandwich type: "; 
    cin >> sandwichtype; 
} while (sandwichtype < 1 || sandwichtype > 3); 

Как для в то время как заявление

while (sandwichtype > 0 && sandwichtype < 4) 
cin >> sandwichtype; 

когда он перебирает, когда пользователь вводит правильный выбор и останавливает итерации, когда пользователь вводит неверный выбор.

Также вы должны убедиться, что пользователь не прервал ввод. Например

do 
{ 
    cout << "Enter the type of sandwich" << endl 
     << "Input 1 for cheese, 2 for veggie, 3 for customed" << endl << endl 
     << "Sandwich type: "; 

    sandwichtype = 0; 
} while (cin >> sandwichtype && (sandwichtype < 1 || sandwichtype > 3)); 


if (sandwichtype == 0) cout << "Oops! The user does not want to contact."; 
1
int sandwichtype=0; 

while (sandwichtype < 1 || sandwichtype > 3) { 
    cout << "Enter the type of sandwich" << endl 
     << "Input 1 for cheese, 2 for veggie, 3 for customed" << endl << endl 
     << "Sandwich type: "; 
    cin >> sandwichtype; 
} 
2

Цикл повторяется, пока тех пор, пока его выражение ((sandwichtype > 0 && sandwichtype < 4)) вычисляется в True.

Это означает, что до тех пор, пока значения >0 и <4 будут перечитывать данные от пользователя. Только тогда, когда пользователь вводит значение за пределами этого диапазона (которое по определению является недопустимым), цикл while останавливается, и программа будет продолжать (и обрабатывать недопустимые данные).

2

У вас есть условие while inverted - вы хотите напечатать это сообщение, если пользователь не указал действительный номер - это любое число, не находящееся в интервале < 1,3>.

Таким образом, вы должны отрицать свое состояние:

while (!(sandwichtype > 0 && sandwichtype < 4)) 

И может быть переписан, возможно, легче читать

while (sandwichtype < 1 || sandwichtype > 3) 

И последнее, но не в последнюю очередь, я хотел бы предложить, чтобы охватить весь то время как блок и отступом.

int sandwichtype = 0; 
cin >> sandwichtype; 
while (sandwichtype < 1 || sandwichtype > 3) 
{ 
    cout << "Enter the type of sandwich" << endl 
     << "Input 1 for cheese, 2 for veggie, 3 for customed" << endl << endl 
     << "Sandwich type: "; 

    cin >> sandwichtype; 
} 
Смежные вопросы