程序在循环中运行

时间:2015-05-07 17:08:43

标签: c++

我试图找出程序在循环中运行的原因。我只是看不出它是如何开始循环的。想给你更多的信息,但只是运行代码并做正确的事情,程序只是重新开始,但不是在开头。它将从我选择付款选项时开始。 这是代码,代码是c ++:

#include <iostream>
#include <functional>
using namespace std;

int option, pause, payment, selection, zipcode, error, pin, quantity_chips, quantity_milk, quantity_cola,
    quantity_coffee, quantity_pennies, quantity_nickels, quantity_dimes, quantity_quarters, quantity_dollars,
    quantity_fives, quantity_tens, quantity_twenties, quantity_total;
float chips, milk, cola, coffee, total, tax, final_cost, pennies, nickels, dimes, quarters,
    dollars, fives, tens, twenties, cash_total, owed, change;

void checkout(), debitcard (), creditcard (), cash (), receipt ();

void menu ()
{
    cout << "Welcome to Kenjin Xer0's Item Pooper.\n"
            << "10 or less items.\n";
    do
    {
        quantity_total = (quantity_chips) + (quantity_milk) + (quantity_cola) + (quantity_coffee);
        cout << "Select from our menu:                  Selected\n"
            << "\t1. Potato Chip.....$1.50......" << quantity_chips << "\n"
            << "\t2. 2% Milk.........$2.00......" << quantity_milk << "\n"
            << "\t3. Off Brand Cola..$1.00......" << quantity_cola << "\n"
            << "\t4. Dark Coffee.....$2.50......" << quantity_coffee << "\n"
            << "\t5. Check out            Total:" << quantity_total << "\n";
        cout << "Enter your option: ";
        cin >> option;
        if (option == 1)
        {
            cout << "Quantity: ";
            cin >> quantity_chips;
            chips = (1.5 * quantity_chips);
        }
        else if (option == 2)
        {
            cout << "Quantity: ";
            cin >> quantity_milk;
            milk = (2 * quantity_milk);
        }
        else if (option == 3)
        {
            cout << "Quantity: ";
            cin >> quantity_cola;
            cola = (1 * quantity_cola); 
        }
        else if (option == 4)
        {
            cout << "Quantity: ";    
            cin >> quantity_coffee;   
            coffee = (2.5 * quantity_coffee);  
        }   
        else if (option == 5)
        {
            if (total > 10)
            {
                cout << "Problem! 10 or less line, Man!\n";
                option = 0;
            }
            else
            {
                checkout();
            }
        }
        else
        {
            cout << "Invalid option.\n";
        } 
    } 
    while (option !=5);
}

void checkout ()
{   
    do
    {
        cout << "Select payment option (1:Debit 2:Credit 3:Cash): ";
        cin >> payment;
        if (payment == 1) 
        {
            debitcard ();
        }
        else if (payment == 2)  
        {
            creditcard ();      
        } 
        else if (payment == 3)
        {
            cash ();
        }
        else 
        {  
            cout << "Weird Choice, try again.\n";
        }
    }
    while (payment != 1||2||3);
}

void debitcard ()
{
    error = 3;
    do
    {
        error--;
        cout << "Enter PIN:\n"; 
        cin >> pin;
        if (error == 0)
        {
            cout << "We are sorry but does this card acually belong to you.\n"
                << "Now Leave.\n";
            break;
        }
        else if (pin != 0000) 
        {
             cout << "Wrong. Try Again\n"
                 << "You now have " << error << " more tries\n";
        }
        else 
        {
            receipt();
        }
    }
    while (pin != 0000);
}

void creditcard ()
{
    error = 3;
    do
    {
        error--;
        cout << "Enter Zip:\n"; 
        cin >> zipcode;
        if (error == 0)
        {
            cout << "We are sorry but does this card acually belong to you.\n"
                << "Now Leave.\n";
            break;
        }
        else if (zipcode != 77523) 
        {
             cout << "Wrong. Try Again\n"
                 << "You now have " << error << " more tries\n";
        }
        else 
        {
            receipt();
        }
    }
    while (zipcode != 77523);
}

void cash ()
{
    total = (chips) + (milk) + (cola) + (coffee);
    tax = (total * .10);
    final_cost = tax + total;
    cout << "You owe $"<< final_cost <<".\n";
    do
    {
        cash_total = (pennies) + (nickels) + (dimes) + (quarters) + (dollars) + (fives) + (tens) + (twenties);
        owed = final_cost - cash_total;
        cout << "Select the Amount:\n"
            << "\t1. Penny................$0.01......" << quantity_pennies << "\n"
            << "\t2. Nickel...............$0.05......" << quantity_nickels << "\n"
            << "\t3. Dime.................$0.10......" << quantity_dimes << "\n"
            << "\t4. Quarter..............$0.25......" << quantity_quarters << "\n"
            << "\t5. One Dollar Bill......$1.00......" << quantity_dollars << "\n"
            << "\t6. Five Dollars Bill....$5.00......" << quantity_fives << "\n"
            << "\t7. Ten Dollar Bill......$10.00....." << quantity_tens << "\n"
            << "\t8. Twenty Dollar Bill...$20.00....." << quantity_twenties << "\n"
            << "\t9. Cash Out\n"
            << "Cash you Have: $" << cash_total << "           Still owe: $" << owed << "\n";
        cout << "Enter your selection: ";
        cin >> selection;
        if (selection == 1) 
        {
            cout << "Quantity: ";
            cin >> quantity_pennies;
            pennies = (0.01 * quantity_pennies); 
        }
        else if (selection == 2)
        {
            cout << "Quantity: ";
            cin >> quantity_nickels;
            nickels = (0.05 * quantity_nickels); 
        }
        else if (selection == 3)
        {
            cout << "Quantity: ";
            cin >> quantity_dimes;
            dimes = (0.10 * quantity_dimes); 
        }
        else if (selection == 4)
        {
            cout << "Quantity: ";
            cin >> quantity_quarters;
            quarters = (0.25 * quantity_quarters); 
        }
        else if (selection == 5)
        {
            cout << "Quantity: ";
            cin >> quantity_dollars;
            dollars = (1.00 * quantity_dollars); 
        }
        else if (selection == 6)
        {
            cout << "Quantity: ";
            cin >> quantity_fives;
            fives = (5.00 * quantity_fives); 
        }
        else if (selection == 7)
        {
            cout << "Quantity: ";
            cin >> quantity_tens;
            tens = (10.00 * quantity_tens); 
        }
        else if (selection == 8)
        {
            cout << "Quantity: ";
            cin >> quantity_twenties;
            twenties = (20.00 * quantity_twenties); 
        }
        else if (selection == 9)
        {
            receipt ();
        }
        else
        {
            cout << "Invalid option.\n";
        }
    }
    while (selection != 9);
}

void receipt ()
{
    total = (chips) + (milk) + (cola) + (coffee);
    tax = (total * .10);
    final_cost = tax + total;
    change = owed * -1;
    cout << "Receipt Take:\n"; 
    if (quantity_chips > 0)
    {  
        cout << "Potato Chips: $1.50 x " << quantity_chips << " = $" << chips << endl; 
    }   
    if (quantity_milk > 0)  
    {        
        cout << "2% Milk: $2.00 x " << quantity_milk << " = $" << milk << endl;
    }
    if (quantity_cola > 0) 
    { 
        cout << "Off Brand Cola: 1.00 x " << quantity_cola << " = $" << cola << endl; 
    }   
    if (quantity_coffee > 0) 
    { 
        cout << "Dark Coffee: $2.50 x " << quantity_coffee << " = $" << coffee << endl;  
    }  
    cout << "Tax (10.0%): $" << tax << endl; 
    cout << "Total: $" << final_cost << endl;
    cout << "Change Returned: $" << change << endl;
}

int main ()
{
    menu ();
    return 0;
}

3 个答案:

答案 0 :(得分:0)

checkout()中的while循环不正确。你有:

while (payment != 1||2||3);

这不是你怎么做的多或多。你需要把它写成

while (payment != 1 || payment != 2 || payment != 3);

答案 1 :(得分:0)

在你的结帐功能 取代

while (payment != 1||2||3)

通过

while (payment != 1 && payment != 2 && payment != 3)

答案 2 :(得分:0)

要删除您在checkout函数中退出do-while循环所做的一系列令人困惑的条件,可以这样做:

void checkout ()
{   
    bool choice_made;
    do
    {
        choice_made = true;

        cout << "Select payment option (1:Debit 2:Credit 3:Cash): ";
        cin >> payment;
        if (payment == 1) 
        {
            debitcard ();
        }
        else if (payment == 2)  
        {
            creditcard ();      
        } 
        else if (payment == 3)
        {
            cash ();
        }
        else 
        {  
            cout << "Weird Choice, try again.\n";
            choice_made = false;
        }
    }
    while (!choice_made);  
}

您只能退出循环,直到做出有效选择。只需一个简单的布尔值就可以控制逻辑。

关于你的尝试,这一行:

while (payment != 1||2||3)

将逻辑or应用于1,2和3的值。结果始终为true,即1。所以归结为

while (payment != 1)