将键盘输入与枚举类型数据[C++]匹配

match keyboard input to enum type data [C++]

本文关键字:C++ 匹配 数据 类型 键盘 输入 枚举      更新时间:2023-10-16

我在做一个大学项目,它与管理披萨店订单的程序有关。所以我已经计划好了,但当谈到做这件事时,我有些理解错误。首先,我需要向用户询问成分,在程序中,成分是枚举类型的数据,所以我需要将非键盘输入与之匹配。我试过这个

#include <iostream>
#include <array>
#include <sring>
#include <cctype>
#include <cmath>
#include <locale>
#include <algorithm>
using namespace std;
    const int MAX_INGREDIENTES_PIZZA=20;
typedef array<int, MAX_INGREDIENTES_PIZZA> TIngrediente;
//enum ingredientes {TOMATE,QUESO,NATA,CEBOLLA,POLLO,HUEVO,SALAMI,ANCHOA,BACON,GAMBA};
TIngrediente leer_ingrediente(){
    TIngrediente r;
    enum ingredientes {TOMATE,
        QUESO,
        NATA,
        CEBOLLA,
        POLLO,
        HUEVO,
        SALAMI,
        ANCHOA,
        BACON,
        GAMBA};
    char ingrediente;
    getline(cin,ingrediente);
    for (int i=0; i<MAX_INGREDIENTES_PIZZA-1;i++){
        string ingrediente[i]=tolower(ingrediente[p]);
    }
    if(ingrediente=="queso")
    else if(ingrediente=="nata")
    else if (ingrediente=="cebolla")
    else if (ingrediente=="pollo")
    else if (ingrediente=="huevo")
    else if (ingrediente=="salami")
    else if (ingrediente=="anchoa")
    else if(ingrediente=="bacon")
    else if (ingrediente=="gamba")

return r;
}

我不知道是应该将enum{}声明为全局,还是仅在leer_ingredientes() 内部

另一件事是,正如我所说,我不知道在这里该做什么(将输入与enum()匹配):

char ingrediente;
    getline(cin,ingrediente);
    for (int i=0; i<MAX_INGREDIENTES_PIZZA-1;i++){
        string ingrediente[i]=tolower(ingrediente[p]);
    }
    if(ingrediente=="queso")
    else if(ingrediente=="nata")
    else if (ingrediente=="cebolla")
    else if (ingrediente=="pollo")
    else if (ingrediente=="huevo")
    else if (ingrediente=="salami")
    else if (ingrediente=="anchoa")
    else if(ingrediente=="bacon")
    else if (ingrediente=="gamba")

return r;

有人能帮我吗?

好的做法是编写一个函数将字符串转换为ingrediente。如下所示。假设enum与您的平台具有基本类型int

int strToIngrediente(const char *ingr)
{
  if(!strcmp(ingr, "queso"))
    return QUESO;
 if(!strcmp(ingr, "queso"))
    return QUESO;
 if(!strcmp(ingr, "nata"))
    return NATA;
.
.
.  
}