Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用switch,但我想用字符串而不是int进行选择_C++_Csv_Printing_Switch Statement - Fatal编程技术网

C++ 使用switch,但我想用字符串而不是int进行选择

C++ 使用switch,但我想用字符串而不是int进行选择,c++,csv,printing,switch-statement,C++,Csv,Printing,Switch Statement,下面的代码只是主要部分,不包括头文件或其他cpp文件。在程序结束时,我想将用户的选择打印到csv文件中。除非我能改变用户做出选择的方式,否则我不知道该怎么做 1.我可以使用其他int作为用户的选择吗 2.如果我能够为用户的选择做除int以外的事情,那么像我目前所做的那样,只在最后打印到csv代码是否有效 #include <iomanip> #include <iostream> #include <string> #include <cstdlib&g

下面的代码只是主要部分,不包括头文件或其他cpp文件。在程序结束时,我想将用户的选择打印到csv文件中。除非我能改变用户做出选择的方式,否则我不知道该怎么做

1.我可以使用其他int作为用户的选择吗

2.如果我能够为用户的选择做除int以外的事情,那么像我目前所做的那样,只在最后打印到csv代码是否有效

#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;
    }
}
#包括
#包括
#包括
#包括
#包括
#包括“Header.h”
使用名称空间std;
饮料;
int main(int argc,char*argv[])
{
内特肉;
int型;
字符串用户名;
做{

cout您可以使用字符串在用户选择的菜单之间进行比较

string choice = " ";
cout<<"Enter choice "<<endl;
cin>>choice;
字符串选择=”;

cout您可以使用字符串在用户选择的菜单之间进行比较

string choice = " ";
cout<<"Enter choice "<<endl;
cin>>choice;
字符串选择=”;

cout您可以使用
char
进行用户选择或
string
。这不应改变上载
.csv
文件的能力。

您可以使用
char
进行用户选择或
string
。这不应改变上载
.csv
文件的能力

使用switch,但我想用字符串而不是int进行选择

switch
语句中的
case
s必须是
constepr
,因此为了在
switch
es中使用字符串,您需要弄清楚如何使字符串通过该条件

至少在C++17之前,您不能-但是您可以创建一个哈希值/消息摘要,即
constexpr

switch(hasher(string)) {
case hasher("foo"):
    // do foo
    break;
case hasher("bar"):
    // do bar
    break;
}
您的
hasher
函数需要能够为编译时提供的字符串返回一个值,这样才能工作。当然可以为C字符串编写
constexpr
哈希函数

使用switch,但我想用字符串而不是int进行选择

switch
语句中的
case
s必须是
constepr
,因此为了在
switch
es中使用字符串,您需要弄清楚如何使字符串通过该条件

至少在C++17之前,您不能-但是您可以创建一个哈希值/消息摘要,即
constexpr

switch(hasher(string)) {
case hasher("foo"):
    // do foo
    break;
case hasher("bar"):
    // do bar
    break;
}

您的
hasher
函数需要能够为编译时提供的字符串返回一个值,这样才能工作。当然可以为C字符串编写
constexpr
hash函数。

我有点搞不清楚您想怎么做——特别是如果您希望用户键入“3”或者,如果您想让他们输入“整只鸡”。如果您想比较字符串,您可以考虑使用映射,尽管考虑到嵌套的CLI交互,这可能无法完全满足您的需要。但它可能是这样的:

#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; } #包括 无序映射有效树={ "鸡翅":一,, "鸡胸肉":二,, “全鸡”:3, //…剪断。。。 “胸脯”:11, “上等肋骨烤肉”:12、, };//我不确定正确的“value”类型是什么。在这里使用int,但函数实际上可能生成更干净的代码。 串肉;
cout我有点搞不清楚你想怎么做——特别是如果你想让用户输入“3”或者你想让他们输入“整只鸡”。如果你想比较字符串,你可以考虑使用映射,尽管考虑到嵌套的CLI交互,这可能不能完全满足你的需要。但它可能是这样的:

#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; } #包括 无序映射有效树={ "鸡翅":一,, "鸡胸肉":二,, “全鸡”:3, //…剪断。。。 “胸脯”:11, “上等肋骨烤肉”:12、, };//我不确定正确的“value”类型是什么。在这里使用int,但函数实际上可能生成更干净的代码。 串肉;
请阅读关于如何创建a的文章,这是否回答了您的问题?请阅读关于如何创建a的文章,这是否回答了您的问题?我实际上在一个旧答案中添加了一个
constepr
哈希函数。没有人喜欢它,所以对此持保留态度:我实际上在一个旧答案中添加了一个
constepr
哈希函数。没有人喜欢它把它和一粒盐一起吃: