我很困惑如何在循环正常工作时做这个。目标是让代码循环回“主菜单”并允许您选择另一个项目并将其添加到“购物车”中,因为缺少更好的单词。问题是我的代码现在只给你选择的第一个项目的小计,然后退出而不返回主菜单,我希望能够循环进入菜单,直到选择退出然后计算总数。任何帮助表示赞赏!
int main()
{
int dice; //Amount of dice
int beads; //Amount of beads
int bobble; //Amount of bobble heads
int selection; //Selection
string code; //User input coupon code
double diceTotal; //Subtotal for dice
double beadsTotal; //Subtotal for beads
double bobbleTotal; //Subtotal for bobble heads
double total; //Total cost of purchase
const double DICE = 6.25; //Dice cost
const double BEADS = 2.25; //Bead cost
const double BEADS_COUPON = 1.50; //Bead cost w/coupon
const double BOBBLE1 = 16.99; //1-5 Bob. Head cost
const double BOBBLE2 = 14.99; //6-10 Bob. Head cost
const double BOBBLE3 = 12.99; //11+ Bob. Head cost
const string COUPON = "beads1"; //Coupon code
cout << fixed << setprecision(2);
//Welcome
do
{
cout << setw(50) << "Welcome to DecoCar!" << endl;
cout << setw(49) << "Nick Wester, Owner" << endl;
cout << "Our inventory: " << endl;
cout << "1. Fuzzy Dice" << endl;
cout << "2. Mardi Gras Beads" << endl;
cout << "3. Bobble Heads" << endl;
cout << "4. Exit" << endl << endl;
cout << "Please make a selection: ";
cin >> selection;
}
while (selection <= 0 || selection >= 5);
{
if (selection == 1)
{
cout << "How many Fuzzy Dice would you like to buy? ";
cin >> dice;
while (dice < 0)
{
cout << "How many Fuzzy Dice would you like to buy? ";
cin >> dice;
}
diceTotal = dice*DICE;
cout << "Your subtotal for the Fuzzy Dice: $" << diceTotal << endl;
}
else if (selection == 2)
{
cout << "How many sets of Mardi Gras beasd would you like to buy? ";
cin >> beads;
cout << "Please type in your coupon code or NONE: ";
cin >> code;
if (code == "beads1")
{
cout << "Valid code entered" << endl;
beadsTotal = beads*BEADS_COUPON;
cout << "Your subtotal for Mardi Gras beads: $" << beadsTotal << endl;
}
else
{
beadsTotal = beads*BEADS;
cout << "Your subtotal for Mardi Gras beads: $" << beadsTotal << endl;
}
}
else if (selection == 3)
{
cout << "How many Bobble Heads would you like to buy? ";
cin >> bobble;
if (bobble >= 1 && bobble <= 5)
{
bobbleTotal = bobble*BOBBLE1;
cout << "Your subtotal for Bobble Heads: $" << bobbleTotal << endl;
}
else if (bobble >= 6 && bobble <= 10)
{
bobbleTotal = bobble*BOBBLE2;
cout << "Your subtotal for Bobble Heads: $" << bobbleTotal << endl;
}
else if (bobble >= 11)
{
bobbleTotal = bobble*BOBBLE3;
cout << "Your subtotal for Bobble Heads: $" << bobbleTotal << endl;
}
}
}
}
答案 0 :(得分:1)
我希望do-while循环以这种方式工作。可悲的是没有。
这个循环...
while (someCondition) {
// stuff
}
除了它将始终第一次运行之外,与另一个相同。
do {
// stuff
}
while (someCondition);
可悲的是,没有一个循环结构像中那样在中间断裂。这就是break
的用途。
while (true) {
// read something
if (exitCondition) break;
// use what you read
}
答案 1 :(得分:0)
while
部分之后的语句顺序错误。它们需要在while
之前。
do
{
cout << setw(50) << "Welcome to DecoCar!" << endl;
cout << setw(49) << "Nick Wester, Owner" << endl;
cout << "Our inventory: " << endl;
cout << "1. Fuzzy Dice" << endl;
cout << "2. Mardi Gras Beads" << endl;
cout << "3. Bobble Heads" << endl;
cout << "4. Exit" << endl << endl;
cout << "Please make a selection: ";
cin >> selection;
if (selection == 1)
{
...
}
else if (selection == 2)
{
...
}
else if (selection == 3)
{
...
}
// Add this check
else if (selection == 4)
{
break;
}
else
{
// Print a message about the unknown selection.
}
}
while ( true );
// No need for the additional checks.
// while (selection <= 0 || selection >= 5);
<强> PS 强>
while (selection <= 0 || selection >= 5);
应该
while (selection > 0 && selection < 5);
但是,这似乎相当苛刻。除1
,2
,3
或4
以外的任何输入,程序都将退出循环。最好告知用户他们提供了错误的输入,以便他们提供可接受的输入。
答案 2 :(得分:0)
在熟悉代码之前,最好分析问题背后的逻辑。说到这个,它包含了这些步骤:
1.print提示信息到屏幕
2.阅读用户的选择
3.1一些具体的选择值表明整个过程的结束
3.2其他值带有一些任务,然后重复步骤1.
然后写下代码是一项微不足道的任务:
while(true) { // -> while/do-while/for has no difference here, what we need is an endless loop
cout<<"welcom info"; // step 1.
cin>>selection; // step 2.
if (/* selection out of expected range */)
break; // step 3.1 jump out of the loop;
switch(selection) { // step 3.2 Both switch-case/ if-else-if are OK
case 0: /* bla */ break;
case 1: /* yada */ break;
}
}
答案 3 :(得分:-1)
看起来您的代码可能需要重新设计:
试试这个伪代码:
do
{
Ask for selection
Switch(selection)
{
Case 1: ask for quantity and break;
Case 2: same here
Case 3: same
Case 4: same
Default : break
}
Calculate the subtotal based on above case selected.
}while(selection is greater than 0 and less than 5);
Finally print the total amount