2013-10-17 27 views
0

我是初學者,被卡住了。我寫了這個,迄今爲止它不工作。在「添加或移除交易者」之後,它什麼都不做。任何幫助或花絮如何使這個功能將不勝感激。謝謝。指針不能正常工作的C++程序

#include<iostream> 
#include<iomanip> 
#include<string> 
using namespace std; 

struct Department{ 
string deptName; 
int numTraders;  
}; 

void addTraders(Department *, int); 
void removeTraders(Department *, int); 

int main(){ 

char addOrRemove; 
Department departments[10] = { 
    {"Bank Loan", 10}, 
    {"Conservative Allocation", 9}, 
    {"Europe Stock", 10}, 
    {"Domestic", 21}, 
    {"Asia", 10}, 
    {"Large Growth", 5}, 
    {"Long-term Bond", 5}, 
    {"Money Market", 25}, 
    {"Emerging Market", 18}, 
    {"Large Blend", 12} 
}; 

int choice, numberToAdd, numberToRemove; 

Department* p_departments = departments; 

for(int i = 0; i < 10; i++){ 
    cout << "Department # " << (i + 1) << ", Name: " << p_departments[i].deptName << 
     ", Traders: " << p_departments[i].numTraders << endl; 
} 
cout << endl; 

do{ 

cout << "Enter 0 to quit, or choose a department number: "; 
cin >> choice; 

cout << "Add or remove traders (A or R) ? "; 
cin >> addOrRemove; 

if(addOrRemove == 'A' || 'a'){ 
    cout << "how many traders to add" << endl; 
    cin >> numberToAdd; 
    addTraders(&departments[choice-1] ,numberToAdd); 
} 
else if(addOrRemove == 'R' || 'r'){ 
    cout << "how many traders to remove" << endl; 
    cin >> numberToRemove; 
    removeTraders(&departments[choice-1],numberToRemove); 
} 
else{ 
    cout << addOrRemove << " is not a valid selection. \n"; 
} 

for(int i = 0; i < 10; i++){ 
    cout << "Department # " << (i + 1) << ", Name: " << p_departments[i].deptName << 
     ", Traders: " << p_departments[i].numTraders << endl; 
} 
cout << endl; 

}while(count != 0); 

system("pause"); 
return 0; 
} 

void addTraders(Department *dept, int numAdd){ 

dept->numTraders += numAdd; 
} 

void removeTraders(Department *dept, int numRemove){ 

dept->numTraders += numRemove; 
} 
+3

'if(addOrRemove =='A'||'a')'does not do you think and other'if' – billz

+0

你是否已經通過調試器完成了代碼?你的程序開始錯過什麼地方? – frozenkoi

回答

0

以下條件總是評價爲true;即使是false || 'a''a'〜>true

if(addOrRemove == 'A' || 'a'){ ... 

它的意思是:

if(addOrRemove == 'A' || addOrRemove == 'a'){ ... 

然而,當addOrRemove被聲明爲char,則:

cin >> addOrRemove; 

可能只是閱讀一個新的字符或一些空白。這將是可能更合理申報addOrRemovestd::string,改變你的條件:

if(addOrRemove == "A" || addOrRemove == "a"){ ... 

而且你讀choice和它的0後,你應該break你的循環,這樣就不會嘗試在索引訪問元素0 - 1

cin >> choice; 
if (choice == 0) break; // <-- THIS 
+0

謝謝我做了這些改變。它應該有選擇權並且不計算,但是在添加或移除交易者之後,我的程序仍然終止(在輸入A或R後按任意鍵繼續)。 – user2535063

+0

@ user2535063:現在查看我的答案。如果這沒有幫助,那麼我不知道究竟出了什麼問題。嘗試調試它。 – LihO

+0

我感謝您的幫助。再次感謝你。 – user2535063

0

首先代替

if(addOrRemove == 'A' || 'a'){ 

你應該寫

if(addOrRemove == 'A' || addOrRemove == 'a'){ 

其次,因爲它似乎編譯器認爲計數你應該定義變量數 - 是的標準算法的std ::數名。