2014-03-26 3 views
1

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 가지 경우가 있습니다. 더 쉽게 코드를 작성할 수있는 방법이 있습니까?

for (int index=0; index<e; index++){  
    bins[index].num = bins[index].num - enter2; 
} 

당신은 어느 프로그램을 말해야 특정 빈에서 제거 할 경우 : 당신이 여기에있는 모든 쓰레기통 통해 반복되기 때문이다

답변

2

.

내가 이해, 당신은 전체 저장소를 제거 할에서

...

당신이 배열에서 요소를 제거해야이 작업을 수행합니다.

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; 

, 그것은 모든 어렵게, 그것은 삼가 것 같은 느낌이 든다.

  • 지금 당신이 배열
  • 당신의 Initialized 요소의 수를 추적 할 필요가 이제 0
  • 에 0 Inventory 항목을 설정하면 성공적으로 두 변수를 설정하는 것을 확인할 수 있습니다 이유입니다 또한 배열이 더 C++ 없습니다

, 거기에는 캡슐화, 아니 OOP가 없습니다, 당신은 STUF를 추적해야하기 때문에이 가능성이 global 변수를 도입하도록 강제의 크기를 추적해야 에프.

확장 불가능하고 유지 보수가 불가능한 코드를 작성하는 것이 현재의 상황에서 나쁘지만 가장 중요한 것은 미래에 적합하지 않습니다.

+0

벡터 또는 표준 ::리스트 부분 (Number_Bins)을 사용하지 않으면 어떻게 될까요? 다른 방법이 있습니까? 내가 10 가지 경우로 작성한 메뉴는 어떻습니까? 하나의 사건이나 다른 것으로 그것을 할 수 있습니까? 나는 구조가 새롭다는 것에 대해 유감 스럽습니다. 그리고 저는 이것을하기위한 더 많은 방법을 알고 싶습니다. – user3019164

+1

@ user3019164, 아니, 그렇지 않다. 나는 이것을 다르게하기 위해 세 가지 구조를 말했고, 당신이하는 방식에 충실하고 싶다. 편집 확인 – Claudiordgz

+0

벡터 또는 다른 옵션을 사용하는 방법을 모르겠습니다. 나는 그것에 대해 읽어야 할 것 같아요. – user3019164

관련 문제