2017-01-07 5 views
-1

Ich habe ein einfaches Programm erstellt, um mir zu helfen, zu verstehen, wie man eine Struktur dynamisch zuweist. Ich möchte, dass das Programm 5 Namen und 5 Konten vom Benutzer erhält und die Namen und Konten anzeigt. Ich weiß, dass ein Zeiger wie eine Referenzvariable ist, die einzigen Unterschiede, statt den Wert zu übergeben, übergibt er die Adresse der Variablen. Ich setze einen Bruchpunkt für Zeile 23 ("getline (std :: cin, clientPtr [count] .name);"), Zeile 25 ("std :: cin.ignore (std :: numeric_limits :: max()") \ n '); "), Zeile 27 (" std :: cin >> clientPtr [Anzahl] .accounts; "), Zeile 40 (" std :: cout < < "Name:" < < clientPtr [Anzahl]. name; "), Zeile 41 (" std :: cout < < "Name:" < < clientPtr [count] .name; "), Zeile 31 (showInfo (& client);). Wenn ich es debuggte zeigt, dass Zeile 41 nicht ausgeführt wird. Es sollte die Namen und die Konten jedes Clients anzeigen. In diesem Fall ist es nicht. Ich bin mir nicht sicher warum, nur ein kleiner Hintergrund über mich, ich bin neu in C++, auch mit dem Debugger. Ich verwende xcode 8.2 und der Debugger, den ich verwende, ist lldb. Ich bin hier um zu lernen, also wird alles helfen. Vielen Dank.Ich habe Probleme beim dynamischen Zuweisen meiner Struktur

#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

'für (int count = 5; count <5; count ++)' - Siehst du etwas falsch mit dieser Linie? – PaulMcKenzie

+1

'showInfo (& Client);' irgendwas falsch sehen? – juanchopanza

Antwort

0

Sie sind die falsche Sache zu showInfo() geben. Sie haben zwei Variablen .. eine einzelne BankInfo-Variable und ein dynamisch zugewiesenes Array mit der Größe 5.

Sie wollen über die letztere und nicht die erstere iterieren.

Ändern showInfo(&client); zu showInfo(clientPtr); sollte vielleicht den Trick tun?

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

Ich würde denken 'für (int count = 0; count <5; count ++)' Nein? – Galik

+0

Während dieser Code die Frage beantworten kann, verbessert ein zusätzlicher Kontext, warum und/oder wie dieser Code die Frage beantwortet, seinen langfristigen Wert. –

+0

Versuchen diese Leere show (BankInfo * clientPtr) { für (int count = 0; count <5; zählen ++) { std :: cout << "Name:" << clientPtr [count] .name; std :: cout << "Konto:" << clientPtr [Anzahl] .accounts; } } – Kishan

0

Also habe ich die Lösung behoben Ich habe mehrere Fehler gemacht, aber danke für den Vorschlag. Hier ist was ich getan habe.

#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 

    } 
} 
Verwandte Themen