如果输入是例如“banana”,我想打印香蕉的千卡。我试过这样的事情(并且失败了):
string input;
cin >> input;
cout << input.Kcal << endl;
我知道我可以使用if语句来执行此操作,如:
string input;
cin >> input;
if(input == "banana")
{
cout << banana.Kcal << endl;
}
但是当我有超过1000种食物时,我必须写很多代码...
我的香蕉对象的声明和定义。每个对象都有kcal。
food banana;
banana.Kcal = 89;
我的班级,Food.h代码:
#pragma once
class CFood
{
public:
CFood();
~CFood();
float Kcal;
}
food.cpp代码:
CFood::CFood()
{
Kcal = 0;
}
CFood::~CFood()
{
}
答案 0 :(得分:7)
将所有食物存放在std::map
或相关容器中,并通过string
键访问它们:
std::map<string, Food> Foods;
Foods.insert(std::make_pair("banana", Banana));
// later..
cin >> stuff;
cout << Foods.at(stuff).kcal << endl;
请注意,上述内容是伪的,您通常需要制定一些保护措施来保护您的项目不会崩溃(例如,检查Foods.find(stuff) != Foods.end()
等)。
答案 1 :(得分:2)
不幸的是,C ++是一种编译语言,这意味着它会在编译过程中丢失有关代码名称的信息(转换为机器代码)。这意味着您无法在运行时使用代码中的任何信息(类名,变量名等),而无需手动将其存储在某处。如果你想这样做,你在这里运气不好 - 你需要使用动态/解释语言,如PHP或JavaScript。
如果你想在C ++中这样做,你需要创建一个带有name-&gt; value条目的哈希映射,然后根据程序输入显示它的值(MrDuk在他的回答中提供了很好的例子)。