我的问题是:如何在我的枚举类型的函数中设置默认值,作为枚举中的值之一。这是我第一次使用Enumerations和枚举函数。我对Intro / Beginner C ++有很多了解。
示例..设置默认值以返回HANDHELD?
对于提出更好/更清晰问题的任何建议都将不胜感激。
ComputerType SellerList::ReadAndReturnComputerType() const
{
char type[MAX_NAME_LEN];
cin >> type;
if(strcmp(type, "desktop") == 0)
return DESKTOP;
else if (strcmp(type, "laptop") == 0)
return LAPTOP;
else if(strcmp(type, "tablet") == 0)
return TABLET;
else if(strcmp(type, "handheld") == 0)
return HANDHELD;
}
答案 0 :(得分:1)
请不要在所有地方使用strcmp
和else if
来做那种事情...你正在做c ++!
至少执行类似以下代码的操作。它可以维护得更多,并且有一些改进,你可以使用相同的地图处理转换枚举/字符串和字符串/枚举(你甚至可以使用bimap!)。
#include <iostream>
#include <map>
#include <string>
enum ComputerType
{
DESKTOP,
LAPTOP,
TABLET,
HANDHELD
};
ComputerType ReadAndReturnComputerType()
{
// I assume this is not multithread othewise there wouldn't be any cin
static std::map<std::string, ComputerType> type {
{ "desktop", DESKTOP },
{ "laptop", LAPTOP },
{ "tablet", TABLET },
{ "handheld", HANDHELD } };
std::string input;
std::cin >> input;
auto it = type.find(input);
// Don't forget to clean the input here !
// something like:
//
// boost::trim(input);
// boost::to_lower(input);
if (type.end() == it)
{
return HANDHELD;
}
return it->second;
}
答案 1 :(得分:0)
如果要在if语句
之前设置默认值ComputerType SellerList::ReadAndReturnComputerType() const
{
ComputerType defType = HANDHELD;
char type[MAX_NAME_LEN];
cin >> type;
if(strcmp(type, "desktop") == 0)
type = DESKTOP;
else if (strcmp(type, "laptop") == 0)
type = LAPTOP;
else if(strcmp(type, "tablet") == 0)
type = TABLET;
else if(strcmp(type, "handheld") == 0)
type = HANDHELD;
return defType;
}