2017-01-07 10 views
-1

構造体を動的に割り当てる方法を理解するのに役立つ簡単なプログラムを作成しました。私は、プログラムがユーザーから5つの名前と5つのアカウントを取得し、名前とアカウントを表示するようにします。私はポインタが参照変数のようなものであることを知っている、唯一の違いは、値を渡す代わりに、変数のアドレスを渡します。私はライン23( "std :: cin.ignore(std :: numeric_limits :: max()、")行25( "getline(std :: cin、clientPtr [count] .name);" ( "std :: cin >> clientPtr [count] .accounts;")、40行目( "std :: cout < <"の名前: "< < clientPtr [count]。 );)41行目( "std :: cout < <"名前: "< < clientPtr [count] .name;")、31行目(showInfo(&クライアント))。私がデバッグすると、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()に間違ったことを配っています。 1つのBankInfo変数と、サイズが5の動的に割り当てられた配列の2つの変数があります。

前者ではなく後者で反復します。

showInfo(&client);からshowInfo(clientPtr);に変更するのはおそらくトリックですか?

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

私は 'for(int count = 0; count <5; count ++)といいでしょうか? – Galik

+0

このコードは質問に答えるかもしれませんが、このコードが質問に答える理由および/または方法に関する追加の文脈を提供することで、長期的な価値が向上します。 { のstd :: coutの<< "名:" –

+0

(;;数<5カウント++ int型カウント= 0)のためにこの 無効SHOWINFO(BankInfo * clientPtr) { を試してみてください<< clientPtr [回数] .nameの。 std :: cout << "アカウント:" << 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 

    } 
} 
関連する問題