我有一个程序,必须在10个零件之间进行选择。一旦用户选择了一个垃圾箱,该程序会询问您是否要添加或删除部件。我的问题是当我尝试添加或从单个垃圾箱中删除时,它会添加并从所有垃圾箱中删除。
struct Inventory
{
char description[35];
int num;
};
Inventory parts[Number_Bins] = {
{"Valve", 10},
{"Bearing", 5},
{"Bushing", 15},
{"Coupling", 21},
{"Flange", 7},
{"Gear", 5},
{"Gear Housing", 5},
{"Vacuum Gripper", 25},
{"Cable", 18},
{"Rod", 12}
};
这是我删除部件的功能。我有另一个添加部件,它是相似的。我可以为数组的每个元素创建10个,但这不是重点。
void RemoveParts(Inventory bins[])
{
int e = 10;
int enter2;
cout << "Enter how many you want to remove\n";
cin >> enter2;
if (enter2 < 0)
{
cout << "Negative Values are not legal. Try again\n";
}
else
{
for (int index = 0; index < e; index++)
{
bins[index].num = bins[index].num - enter2;
}
}
}
我使用开关菜单来拾取任何垃圾箱。所以有10个案例。有什么方法可以让它变得更容易并且编写更少的代码吗?
答案 0 :(得分:2)
那是因为你在这里循环遍历所有的箱子:
for (int index=0; index<e; index++){
bins[index].num = bins[index].num - enter2;
}
如果你想从某个垃圾箱中删除,你必须告诉你的程序是哪一个。
根据我的理解,您想删除整个垃圾箱......
要执行此操作,您必须从数组中删除元素。
我建议使用std::vector<Inventory> parts(Number_Bins)
或std::array<Inventory, 10> parts;
甚至std::list<Inventory> parts(Number_Bins)
。然后设置。
然后删除元素只需使用删除
要从array
专门删除,您必须移动整个阵列。
//where enter2 is the element we want to erase
for (int index=enter2-1; index<total_size; index++){
bins[index] = bins[index + 1];
}
// then reinit content of last element
bins[total_size-1] = 0;
我根本不推荐这条道路,它使一切更难,这感觉就像是轻描淡写。这就是原因:
Inventory
项设置为0成功将两个变量都设置为0 Initialized
个元素的数量这不是C++
,没有封装,没有OOP,这可能会迫使您引入global
变量,因为您必须跟踪内容。
编写不可扩展且不可维护的代码对您的现在不利,但最重要的是,对您的未来而言。