2015-10-02 7 views
2

Я работаю над созданием меню с проверкой ошибок, и это то, что я придумал, но я не могу заставить его работать.Почему мой цикл while-while не зацикливается?

#include <iostream> 
using namespace std; 

int main() 
{ 

char option; // user's entered option will be saved in this variable 
int error1 = 0; 

//Displaying Options for the menu 
cout << "There are three packages available." << endl; 
cout << "Monthly Price - Price per MB for overages (excluding C)" << endl; 
cout << "A) $15 - $.06 for each MB after 200 MB." << endl; 
cout << "B) $25 - $.02 for each MB after 2,000 MB (approx. 2 GB)." << endl; 
cout << "C) $50 - Unlimited data." << endl; 

do //do-while loop starts here 
{ 

//Prompting user to enter an option according to menu 
cout << "Please enter which plan you currently have : "; 
cin >> option; // taking option value as input and saving in variable "option" 

if(option == 'A' || option == 'a') // Checking if user selected option 1 
{ 
    cout << "You chose a" << endl; 
    error1 = 1; 
} 
else if(option == 'B' || option == 'b') // Checking if user selected option 2 
{ 
    cout << "You chose b" << endl; 
    error1 = 1; 
} 
else if(option == 'C' || option == 'c') // Checking if user selected option 3 
{ 
    cout << "You chose c" << endl; 
    error1 = 1; 
} 
else //if user has entered invalid choice 
{ 
    //Displaying error message 
    error1 = 0; 
    cout << "Invalid Option entered"; 
} 
} 
while(error1 = 0); //condition of do-while loop 
return 0; 
} 

При вводе неправильного значения на выходе будет введена Неверная опция; однако он не будет возвращаться к началу и снова запрашивает пользователя для ввода.

Почему это делается?

+3

изменение while (error1 = 0); в while (error1 == 0); –

+1

Это просто опечатка, которую вы назначили вместо проверки на равенство. – shuttle87

+3

Поднимите уровни предупреждения на свой компилятор. –

ответ

4

Изменить

while(error1 = 0); //condition of do-while loop 

в этом

while(error1 == 0); //condition of do-while loop 

в первом варианте вы просто присвоить 0 до error1, а затем error1 испытывается, как логическое значение, которое означает, что 0 является FALSE и не 0 ИСТИНА , Поэтому sonce условие в while оценивается как FALSE, цикл завершается.

+0

Полностью пропустил это, благодаря тому, что был другим набором глаз. –

+0

@AugieLuebbers приветствуются. Это очень распространенная ошибка. –

1

Вы назначаете 0 в error1 внутри while, что всегда неверно, поэтому цикл не будет повторяться. Изменение while(error1=0); в while(error1==0);

+0

Спасибо, я этого не понимал! –

1

Подобно тому, как дополнение: рассмотреть инвертировать выражение таким образом:

while (0 = error1); 

В этом случае компилятор остановит вас, если вы забыли дополнительные = или запутать задание с равным оператором

+0

Не думал об этом, но звучит неплохо. Я буду помнить об этом в будущем. Спасибо @lrleon –

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