2017-01-07 64 views
-1

我創建了一個簡單的程序來幫助我理解如何動態分配結構。我希望程序從用戶那裏獲取5個名稱和5個帳戶,並顯示姓名和帳戶。我知道一個指針就像一個引用變量,唯一的區別而不是傳遞值,它傳遞變量的地址。我爲第23行設置了一個突破點(「getline(std :: cin,clientPtr [count] .name);」),第25行(「std :: cin.ignore(std :: numeric_limits :: max(),' \ n');「), line 27(」std :: cin >> clientPtr [count] .accounts;「),第40行(」std :: cout < <「Name:」< < clientPtr [count]。 (「std :: cout < <」Name:「< < clientPtr [count] .name;」),line 31(showInfo(& client);)。當我調試它時,顯示第41行沒有執行。它應該顯示每個客戶的名稱和賬戶。在這種情況下,它不是。我不知道爲什麼,只是我的一個小背景,我是C++的新手,還有使用調試器。我使用的是xcode 8.2,我使用的調試器是lldb。我在這裏學習,所以任何事情都會有所幫助。謝謝。我在動態分配結構時遇到了問題

#include <iostream> 
#include <limits> 
struct BankInfo 
{ 
    std::string name; 
    std::string accounts; 

}; 

void showInfo(BankInfo*); 

int main() 
{ 
    BankInfo client; 

    BankInfo* clientPtr=nullptr; 

    clientPtr = new BankInfo[5]; 

    for(int count =0; count < 5; count++) 
    { 
     std::cout << "Enter your name:"; 
     getline(std::cin,clientPtr[count].name); 
     std::cin.clear(); 
     std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n'); 
     std::cout << "Enter you account number:"; 
     std::cin >>clientPtr[count].accounts; 


    } 
    showInfo(&client); 


    return 0; 
} 
void showInfo(BankInfo* clientPtr) 
{ 
    for(int count =5; count < 5; count++) 
    { 
     std::cout <<"Name:" << clientPtr[count].name; 
     std::cout <<"Account:" << clientPtr[count].accounts; 
    } 
} 
+4

'for(int count = 5; count <5; count ++)' - 你看到這行有什麼問題嗎? – PaulMcKenzie

+1

'showInfo(&client);'看到有什麼不對嗎? – juanchopanza

回答

0

你交給了錯誤的事情showInfo()。你有兩個變量..一個BankInfo變量和一個大小爲5的動態分配數組。

你想遍歷後者而不是前者。

showInfo(&client);更改爲showInfo(clientPtr);也許應該這樣做?

-1
for(int count=1 ; count<=5 ; count++) 
{ 
//do your stuff here 
} 
+0

我會想'for(int count = 0; count <5; count ++)'no? – Galik

+0

雖然這段代碼可能會回答這個問題,但提供關於爲什麼和/或代碼如何回答這個問題的附加上下文會提高它的長期價值。 –

+0

試一試 空隙showInfo(BankInfo * clientPtr) { 爲(詮釋計數= 0;計數<5;計數++){ 的std :: COUT << 「名稱:」 << clientPtr [count]個。名稱; std :: cout <<「Account:」<< clientPtr [count] .accounts; } } – Kishan

0

所以我解決了我犯的幾個錯誤,但是謝謝你的建議。這就是我所做的。

#include <iostream> 
#include <limits> 
struct BankInfo 
{ 
    std::string name; 
    std::string accounts; 

}; 

void showInfo(BankInfo*); 

int main() 
{ 
    BankInfo client; 

    BankInfo* clientPtr=nullptr; 

    clientPtr = new BankInfo[5]; //Allocate an array of BankInfo struct on the heap 

    for(int count =0; count < 5; count++) 
    { 
     std::cout << "Enter your name:"; 
     getline(std::cin,clientPtr[count].name); // stores the value in the name member 
     std::cout << "Enter you account number:"; 
     std::cin >>clientPtr[count].accounts; // stores the value in accounts member 
     std::cin.clear(); 
     std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n'); 

    } 
    showInfo(clientPtr); 

    delete [] clientPtr; 
    clientPtr = nullptr; 
    return 0; 
} 
void showInfo(BankInfo* clientPtr) 
{ 
    for(int count =0; count < 5; count++) 
    { 
      std::cout <<"\nName:" << clientPtr[count].name; // dereference the pointer to the structure 
      std::cout <<"\nAccount:" << clientPtr[count].accounts; // dereference the pointer to the structure 

    } 
}