2014-09-12 44 views
-2
#include <iostream> 
#include <iomanip> 
using namespace std; 
int main() 
{ 
    int number; 
    float cost; 
    char beverage; 

    bool validBeverage; 

    cout << fixed << showpoint << setprecision(2); 
    do 
    { 
     cout << endl << endl; 
     cout << "Hot Beverage Menu" << endl << endl; 
     cout << "A: Coffee   $1.00" << endl; 
     cout << "B: Tea   $ .75" << endl; 
     cout << "C: Hot Chocolate $1.25" << endl; 
     cout << "D: Cappuccino  $2.50" << endl <<endl << endl; 

     cout << "Enter the beverage A,B,C, or D you desire" << endl; 
     cout << "Enter E to exit the program" << endl << endl; 
     cin>>beverage; 
     while(beverage!='A'||beverage!='B'||beverage!='C'||beverage!='D'||beverage!='E'||beverage!='a'||beverage!='b'||beverage!='c'|| 
     beverage!='d'||beverage!='e') 
     { 
      cout<<"Your selection is invalid please re-enter "; 
      cin>>beverage; 
     } 

     switch(beverage) 
     { 
     case 'a': validBeverage = true; 
     case 'A': validBeverage = true; 
     case 'b': validBeverage = true; 
     case 'B': validBeverage = true; 
     case 'c': validBeverage = true; 
     case 'C': validBeverage = true; 
     case 'd': validBeverage = true; 
     case 'D': validBeverage = true; 
        break; 
     default: validBeverage = false; 
     } 

     if (validBeverage == true) 
     { 
      cout << "How many cups would you like?" << endl; 
     cin>>number; 
     } 
     // Fill in the code to begin a switch statement 
     switch(beverage) 
     { 
     case 'a': cost = number * 1.0; 
     case 'A': cost = number * 1.0; 
       cout << "The total cost is $ " << cost << endl; 
       break; 
     case 'b': cost = number * 0.75; 
     case 'B': cost = number * 0.75; 
       cout<< "The total cost is $ " << cost << endl; 
       break; 
     case 'c': cost = number * 1.25; 
     case 'C': cost = number * 1.25; 
       cout << "The total cost is $ " << cost << endl; 
       break; 
     case 'd': cost = number * 2.50; 
     case 'D': cost = number * 2.50; 
       cout << "The total cost is $ " << cost << endl; 
     case 'e': cout << " Please come again" << endl; 
     case 'E': cout << " Please come again" << endl; 
       break; 
     default:cout << " You have enter an invalid selection"<<endl; 
       cout << " Try again please" << endl; 
     } 

    }while(beverage!='e'||beverage!='E'); 
} 

我试图运行这个程序,但它总是让我输入一个无效的选择。 我试图修改while循环,但它没有工作;它是while循环吗? 也不知道我是否在正确的时候写了while语句。虽然声明不起作用?

+1

'||'是OR。当然,“饮料”会与“A”不同或与“B”或“......”不同。您想要的是&&' – Angew 2014-09-12 14:35:58

+2

代码风格评论:您正在过度使用案例延期。就像如果你喝“e”一样,它会打印“请再来”两次。 – Almo 2014-09-12 14:35:59

+0

@Almo而且,更糟糕的是,要进行两次乘法运算。 – Angew 2014-09-12 14:36:19

回答

1

变化

while(beverage!='e'||beverage!='E'); // Condition becomes true always 

while(beverage!='e'&& beverage!='E'); 

并且类似地更换所有||通过&&在第一while循环条件表达式

while(beverage!='A' && beverage!='B' &&beverage!='C'&& beverage!='D' && beverage!='E' && beverage!='a' && beverage!='b' && beverage!='c' && 
    beverage!='d' && beverage!='e') 
3

取这种情况作为一个例子,同样的问题也在其他人身上。

while (beverage!='e'||beverage!='E'); 

甲字符是不等于'e',或它等于'e',在这种情况下,它不等于'E',所以条件是总是如此。

你想要的是合乎逻辑的。