Le code ci-dessous n'est que la partie principale et n'inclut pas le fichier d'en-tête ou l'autre fichier cpp. À la fin du programme, je souhaite imprimer les choix des utilisateurs dans un fichier csv. À moins que je ne puisse changer la façon dont l'utilisateur fait son choix, je ne vois pas comment faire cela.
1.Puis-je utiliser un autre int pour les choix de l'utilisateur?
2.Si je ' Je suis capable de faire autre chose que int pour les choix de l'utilisateur, est-ce que cela fonctionnerait de simplement avoir l'impression en code csv à la fin comme je l'ai fait jusqu'à présent?
#include <iomanip>
#include <iostream>
#include <string>
#include <cstdlib>
#include <fstream>
#include "Header.h"
using namespace std;
void PrintDrink(Drink);
int main(int argc, char* argv[])
{
int meat;
int type;
string userName;
do {
cout << "\n\nThis program will help you BBQ some of the best meat you have ever tasted. With care taken to ensure \n";
cout << "these steps are followed and the correct temperatures are used, you will find yourself a BBQ expert in no time. \n\n";
cout << "Can we start with getting your name : ";
cin >> userName;
cout << userName << " welcome to this BBQ program.\n\n";
cout << "You can select any of the following to make today: \n";
cout << "1 - Chicken Wings\n";
cout << "2 - Chicken Breast\n";
cout << "3 - Whole Chicken\n";
cout << "4 - Chicken Thighs\n";
cout << "5 - Pork Ribs\n";
cout << "6 - Pork Roast\n";
cout << "7 - Pulled Pork\n";
cout << "8 - Pork Chops\n";
cout << "9 - Pork Tenderloin\n";
cout << "10 - Beef Ribs\n";
cout << "11 - Brisket\n";
cout << "12 - Prime Rib Roast\n";
cout << "Your selection: ";
cin >> meat;
switch (meat)
{
case 1:
cout << "Chicken Wings can be amazing.\n You have two options:\n";
cout << "grill - Grill them\n";
cout << "smoke - Smoke them\n";
cout << "Your selection: ";
cin >> type;
switch (type) {
case 1:
cout << "After seasoning the chicken\nCook them on a medium temperature grill.\nThey will be need to cook for approximately 6 to 8 minutes per side.";
break;
case 2:
cout << "Smoking your chicken will add great flavor.\nSmoke the wings at 250 degrees for approximately 2 to 2.5 hours.";
break;
}goto exit_loop;
case 2:
cout << "Chicken Breasts can be amazing.\n You have two options:\n";
cout << "1 - Grill them\n";
cout << "2 - Smoke them\n";
cout << "Your selection: ";
cin >> type;
switch (type) {
case 1:
cout << "After seasoning the chicken\nCook them on a medium temperature grill.\nThey will be need to cook for approximately 7 to 8 minutes per side.";
break;
case 2:
cout << "Smoking your chicken will add great flavor.\nSmoke the wings at 250 degrees for approximately 2.5 to 3 hours.";
break;
}goto exit_loop;
case 3:
while (meat == 3) {
cout << "A whole chicken needs time to be cooked to the perfect temperature.\nFor the best whole chicken there is really only one option:\n";
cout << "That one option is to smoke the whole chicken.\nWe need to cook this chicken for approximately 45 minutes per pound\n";
double chickWeight;
cout << "Please enter the weight of your whole chicken in pounds: ";
cin >> chickWeight;
double chickTime = chickWeight * 0.75;
cout << "You will need to cook your whole chicken for " << chickTime << " minutes.\nThe chicken thighs will need an internal temperature";
cout << "of 170 degrees and the breasts will need an internal temperature of 165.\n";
goto exit_loop;
}
case 4:
cout << "Chicken thighs can be amazing.\n You have two options:\n";
cout << "1 - Grill them\n";
cout << "2 - Smoke them\n";
cout << "Your selection: ";
cin >> type;
switch (type) {
case 1:
cout << "After seasoning the chicken\nCook them on a medium temperature grill.\nThey will be need to cook for approximately 6 to 8 minutes per side.";
break;
case 2:
cout << "Smoking your chicken will add great flavor.\nSmoke the wings at 250 degrees for approximately 2.5 to 3 hours.";
break;
}while (type < 3);
goto exit_loop;
case 5:
while (meat == 5) {
cout << "Pork ribs, whether they are baby racks, ST. Louis cuts, or any other type they are best when smoked low and slow.\n";
cout << "This amazing meat is really simple to BBQ. Smoke your ribs at 225 degrees for approximately 5 to 6 hours.\n";
cout << "The ribs are done when they are tender and will bend when picking them up.\n";
goto exit_loop;
}
case 6:
while (meat == 6) {
cout << "A pork roast needs time to be cooked to the perfect temperature.\nFor the best pork roast there is really only one option:\n";
cout << "That one option is to smoke the pork roast.\nWe need to cook this roast for approximately 1 hours per pound.\n";
double porkWeight;
cout << "Please enter the weight of your pork in pounds: ";
cin >> porkWeight;
double porkTime = porkWeight * 1;
cout << "You will need to cook your pork for " << porkTime << " hours.\nThe pork will need an internal temperature of 185-195 degrees.\n";
goto exit_loop;
}
case 7:
while (meat == 7) {
cout << "Pulled pork needs to be cooked to an internal temperature that allows the connective fibers to break down\nso there is really only one option for this:\n";
cout << "That one option is to smoke the pork low and slow.\nWe need to cook this pork for approximately 1.5 hour per pound.\n";
double porkWeight;
cout << "Please enter the weight of your pork in pounds: ";
cin >> porkWeight;
double porkTime = porkWeight * 1.5;
cout << "You will need to cook your pork for " << porkTime << " hours.\nThe pork will need an internal temperature of 203 degrees.\n";
goto exit_loop;
}
case 8:
cout << "Pork chops can be amazing.\n You have two options:\n";
cout << "1 - Grill them\n";
cout << "2 - Smoke them\n";
cout << "Your selection: ";
cin >> type;
switch (type) {
case 1:
cout << "After seasoning the pork chops\nCook them on a medium temperature grill.\nThey will be need to cook for approximately 4 to 5 minutes per side.";
break;
case 2:
cout << "Smoking your pork chops will add great flavor.\nSmoke the pork chops at 250 degrees for approximately 45 minutes to 1 hour.";
break;
}while (type < 3);
goto exit_loop;
case 9:
while (meat == 9) {
cout << "A pork tenderloin needs time to be cooked to the perfect tempurature.\nFor the best pork tenderloin there is really only one option:\n";
cout << "That one option is to smoke the pork tenderloin.\nWe need to cook this tenderloin for approximately 2.5 to 3 hours.\n";
cout << "The internal temperature needs to reach at least 145 degrees.\n";
goto exit_loop;
}
case 10:
while (meat == 10) {
cout << "Beef ribs needs to be cooked to an internal temperature that allows the connective fibers to break down\nso there is really only one option for this:\n";
cout << "That one option is to smoke the ribs low and slow.\nWe need to cook this beef for approximately 8 to 10 hours.\n";
cout << "The ribs are done when they are tender and have an internal temperature of 203 degrees.\n";
goto exit_loop;
}
case 11:
while (meat == 11) {
cout << "Brisket needs to be cooked to an internal temperature that allows the connective fibers to break down\nso there is really only one option for this:\n";
cout << "That one option is to smoke the brisket low and slow.\nWe need to cook this brisket for approximately 1.5 hour per pound.\n";
double beefWeight;
cout << "Please enter the weight of your brisket in pounds: ";
cin >> beefWeight;
double beefTime = beefWeight * 1.5;
cout << "You will need to cook your brisket for " << beefTime << " hours.\nThe brisket will need an internal temperature of 203 degrees.\n";
cout << "For the best results use a Texas crunch technique at around 160 degrees.\n";
goto exit_loop;
}
case 12:
while (meat == 12) {
cout << "Prime rib Roast needs to be cooked to an internal temperature of rare to medium for the best results\n and there is really only one option for this:\n";
cout << "That one option is to smoke the prime rib low and slow.\nWe need to cook this prime rib for approximately 40 minutes per pound.\n";
double beefWeight;
cout << "Please enter the weight of your prime rib in pounds: ";
cin >> beefWeight;
double beefTime = beefWeight * 0.67;
cout << "You will need to cook your prime rib for " << beefTime << " hours.\n";
cout << "The prime rib will need an internal temperature according to the desired doneness listed below\n";
string done_ness[3] = { "rare","medium rare", "medium" };
int int_temp[3] = { 130, 135, 140 };
for (int i = 0; i < 3; i++) {
cout << done_ness[i] << ":" << int_temp[i] << " degrees\n";
}
goto exit_loop;
}
}
} while (meat < 13); {exit_loop:;
string n;
int a;
Drink d1;
cout << "What do you want to drink while your meat is cooking?\n";
cout << "Enter your drink of choice: ";
cin >> n;
cout << "How many glasses do you think you can drink while your cooking? ";
cin >> a;
d1.setName(n);
d1.setAmount(a);
PrintDrink(d1);
cout << "\nEnjoy your drink or drinks because you will love the food you're making.";
}
}
void PrintDrink(Drink d1) {
cout << "\nThe name of drink you picked: " << d1.getName();
cout << "\nThe glasses you think you can drink are " << d1.getAmount() << endl;
}
int save() {
ofstream outfile("bbqfile.csv", ios::app);
ifstream infile;
string cont;
cout << "Would you like to save your selections to excell? (Y/N)";
cin >> cont;
while (cont == "Y") {
outfile << meat << type << end;
}
outfile.close();
while (cont == "N") {
system("pause");
return 0;
}
}
4 Réponses :
Vous pouvez utiliser des chaînes pour faire une comparaison entre le choix du menu sélectionné par l'utilisateur.
string choice = " "; cout<<"Enter choice "<<endl; cin>>choice;
Vous pouvez utiliser char pour les choix de l'utilisateur ou string . Cela ne devrait pas modifier la possibilité de télécharger le fichier .csv .
En utilisant switch mais je veux faire la sélection avec une chaîne au lieu d'un int
Les
casdans une instructionswitchdoivent êtreconstexprafin d'utiliser des chaînes dansswitches, vous devez trouver comment faire en sorte que vos chaînes satisfassent à ces critères.Au moins jusqu'à C ++ 17, vous ne pouvez pas - mais vous pouvez créer une valeur de hachage / un résumé de message qui est constexpr .
switch(hasher(string)) { case hasher("foo"): // do foo break; case hasher("bar"): // do bar break; }Votre fonction
hasherdevra pouvoir renvoyer une valeur pour la chaîne fournie lors de la compilation pour cela fonctionne. Il est certainement possible d'écrire des fonctions de hachageconstexprpour les chaînes C.
J'ai en fait ajouté une fonction de hachage constexpr à une ancienne réponse. Personne n'a aimé, alors prenez-le avec un grain de sel: stackoverflow.com/a/58217222/7582247
Je ne sais pas trop comment vous voulez faire cela - en particulier si vous voulez que l'utilisateur tape "3" ou si vous voulez qu'il tape "Whole Chicken". Si vous souhaitez comparer des chaînes, vous pouvez envisager d'utiliser une carte, bien que cela ne vous donne pas exactement ce que vous voulez ici, étant donné l'interaction CLI imbriquée. Mais voici à quoi cela pourrait ressembler:
unordered_map<int, string> entreeSelectionToName = {
1: "Chicken Wings",
}
cout << entreeSelectionToName[1] << endl; // should print "Chicken Wings"
Selon exactement ce que vous voulez, cela pourrait fonctionner mieux que "appuyez sur 1 pour des ailes de poulet". Ceci, en substance, évite d'avoir une instruction if / switch spécifique. Mais, vous devez maintenant vous soucier que l'utilisateur fournisse quelque chose en dehors des valeurs attendues (bien que, pour être honnête, vous deviez toujours le faire).
Aussi, si vous êtes satisfait de la "presse 1 for ... "solution, alors vous pouvez toujours envisager une carte pour récupérer les valeurs de texte brut. Dans ce cas, la clé et les valeurs seraient permutées:
#include <map>
unordered_map<string, int> validEntrees = {
"Chicken Wings": 1,
"Chicken Breast": 2,
"Whole Chicken": 3,
// ...snip...
"Brisket": 11,
"Prime Rib Roast": 12,
}; // I'm not sure what the proper "value" type is. Using an int here, but a function might actually produce cleaner code.
string meat;
cout << "This program will blah blah blah...\n" // rest of the preamble
cout << "You can select any of the following to make today: \n";
for (auto key : validEntrees ) {
cout << key << endl;
}
cout << "Your selection: ";
cin >> meat;
switch(validEntrees[meat]) {
case 1: // Chicken Wings
//... you get the idea
break;
}
Honnêtement, bien qu'il y ait des choses que je changerais à propos de votre solution (en particulier: plus de fonctions, des descriptions regroupées) , le commutateur de base est probablement suffisant, à moins que je ne veuille être particulièrement sophistiqué.
Veuillez lire comment créer un exemple minimal reproductible
Est-ce que cela répond à votre question? Pourquoi l'instruction switch ne peut pas être appliquée aux chaînes?