patterncppMinor
C++ "Vending Machine" task
Viewed 0 times
machinevendingtask
Problem
Task:
Write a program that presents the user w/ a choice of your 5 favorite
beverages (Coke, Water, Sprite, ... , Whatever). Then allow the user
to choose a beverage by entering a number 1-5. Output which beverage
they chose.
★ If you program uses if statements instead of a switch statement,
modify it to use a switch statement. If instead your program uses a
switch statement, modify it to use if/else-if statements.
★★ Modify the program so that if the user enters a choice other than
1-5 then it will output "Error. choice was not valid, here is your
money back."
Write a program that presents the user w/ a choice of your 5 favorite
beverages (Coke, Water, Sprite, ... , Whatever). Then allow the user
to choose a beverage by entering a number 1-5. Output which beverage
they chose.
★ If you program uses if statements instead of a switch statement,
modify it to use a switch statement. If instead your program uses a
switch statement, modify it to use if/else-if statements.
★★ Modify the program so that if the user enters a choice other than
1-5 then it will output "Error. choice was not valid, here is your
money back."
#include
using namespace std;
int main() {
int drink = 0;
string ifswitch;
string again = "y";
while( again == "y" || again == "Y")
{
cout > ifswitch;
cout > drink;
cout > drink;
cout > again;
cout << endl;
}
cout << "Ending...";
}Solution
-
Do not use namespace std;
-
Put your code into functions if possible. For example the Question for the user should be a single function.
}
Note that i use
-
Use a dedicated input function
-
Now define a function that takes the choice and give the beverage.
-
What you could also do is use a third option utilizing a map.
Do not use namespace std;
-
Put your code into functions if possible. For example the Question for the user should be a single function.
void printOptions() {
std::cout << "Your choices of drinks are: " << "\n";
std::cout << "1 - Coke" << "\n";
std::cout << "2 - Sprite" << "\n";
std::cout << "3 - Water" << "\n";
std::cout << "4 - Orange Juice" << "\n";
std::cout << "5 - Apple Juice" << "\n";
std::cout << "What drink would you like (1/5): ";}
Note that i use
"\n" instead of std::endl as this doesnt flush the stream.-
Use a dedicated input function
int chooseBeverage() {
int beverage;
std::cin >> beverage;
return beverage;
}-
Now define a function that takes the choice and give the beverage.
enum choice {
NONE = 0;
COKE,
SPRITE,
WATER,
ORANGE_JUICE,
APPLE_JUICE
};
void serveBeverageIf(choice beverage) {
if(beverage == COKE)
std::cout << "You chose Coke." << "\n";
else if(beverage == SPRITE)
std::cout << "You chose Sprite." << "\n";
else if(beverage == WATER)
std::cout << "You chose Water." << "\n";
else if(beverage == ORANGE_JUICE)
std::cout << "You chose Orange Juice." << "\n";
else if(beverage == APPLE_JUICE)
std::cout << "You chose Apple juice." << "\n";
else
std::cout << "Error. choice was not valid, here is your money back.";
}
void serveBeverageSwitch(choice beverage) {
switch(beverage)
case COKE:
std::cout << "You chose Coke." << "\n";
break;
case SPRITE:
std::cout << "You chose Sprite." << "\n";
break;
case WATER:
std::cout << "You chose Water." << "\n";
break;
case ORANGE_JUICE:
std::cout << "You chose Orange Juice." << "\n";
break;
case APPLE_JUICE:
std::cout << "You chose Apple juice." << "\n";
break;
default:
std::cout << "Error. choice was not valid, here is your money back.";
break;
}
}-
What you could also do is use a third option utilizing a map.
void serveBeverageMap(choice beverage) {
map nameMap = {
std::make_pair(COKE, "Coke"),
std::make_pair(SPRITE, "Sprite"),
std::make_pair(WATER, "Water"),
std::make_pair(ORANGE_JUICE, "Orange juice"),
std::make_pair(APPLE_JUICE, "Apple juice")
};
if(nameMap.find(beverage) == nameMap.end()) {
std::cout << "Error. choice was not valid, here is your money back.";
} else {
std::cout << You chose " << nameMap[beverage] << ".";
}
}Code Snippets
void printOptions() {
std::cout << "Your choices of drinks are: " << "\n";
std::cout << "1 - Coke" << "\n";
std::cout << "2 - Sprite" << "\n";
std::cout << "3 - Water" << "\n";
std::cout << "4 - Orange Juice" << "\n";
std::cout << "5 - Apple Juice" << "\n";
std::cout << "What drink would you like (1/5): ";int chooseBeverage() {
int beverage;
std::cin >> beverage;
return beverage;
}enum choice {
NONE = 0;
COKE,
SPRITE,
WATER,
ORANGE_JUICE,
APPLE_JUICE
};
void serveBeverageIf(choice beverage) {
if(beverage == COKE)
std::cout << "You chose Coke." << "\n";
else if(beverage == SPRITE)
std::cout << "You chose Sprite." << "\n";
else if(beverage == WATER)
std::cout << "You chose Water." << "\n";
else if(beverage == ORANGE_JUICE)
std::cout << "You chose Orange Juice." << "\n";
else if(beverage == APPLE_JUICE)
std::cout << "You chose Apple juice." << "\n";
else
std::cout << "Error. choice was not valid, here is your money back.";
}
void serveBeverageSwitch(choice beverage) {
switch(beverage)
case COKE:
std::cout << "You chose Coke." << "\n";
break;
case SPRITE:
std::cout << "You chose Sprite." << "\n";
break;
case WATER:
std::cout << "You chose Water." << "\n";
break;
case ORANGE_JUICE:
std::cout << "You chose Orange Juice." << "\n";
break;
case APPLE_JUICE:
std::cout << "You chose Apple juice." << "\n";
break;
default:
std::cout << "Error. choice was not valid, here is your money back.";
break;
}
}void serveBeverageMap(choice beverage) {
map<choice, std::string> nameMap = {
std::make_pair(COKE, "Coke"),
std::make_pair(SPRITE, "Sprite"),
std::make_pair(WATER, "Water"),
std::make_pair(ORANGE_JUICE, "Orange juice"),
std::make_pair(APPLE_JUICE, "Apple juice")
};
if(nameMap.find(beverage) == nameMap.end()) {
std::cout << "Error. choice was not valid, here is your money back.";
} else {
std::cout << You chose " << nameMap[beverage] << ".";
}
}Context
StackExchange Code Review Q#143528, answer score: 4
Revisions (0)
No revisions yet.