2017-01-14 3 views
0

Ich habe ein kleines Problem, das ich nicht verstehe. Ich habe viele Dinge versucht, die ich im Internet gelesen habe, aber nichts funktioniert wirklich.C++ nicht in mein cin eingeben

Mein main.cpp Code:

#include <iostream> 
using namespace std; 
#include "Equipe.h" 
#include "Club.h" 

//PROTOTYPE 
void MenuSecClub(); 
void MenuSecFed(); 


int main(int argc,char* argv[]) 
{ 
    int choice; 
    //cout << " Welcome heeere !!!" << endl; 
    Club C; 
    cin >> C; 
    cout << " hello : " << C; 
    cin >> choice; 
    return 0; 
} 

Code My Club istream

istream& operator>>(istream& s,Club& C) 
{ 
    int nc; 
    char Buffer[20],Buffer2[20]; 
    cout << "Enter a name" << endl; 
    s.getline(Buffer,20); 
    C.setNom(Buffer); 
    s.clear(); 
    cout << "Enter a num club" << endl; 
    cin >> nc; 
    C.setNumClub(nc); 
    s.clear(); 
    cout << "Enter the address of the club" << endl; 
    s.getline(Buffer,20); 
    C.setAdresse(Buffer); 
    s.clear(); 

    return s; 
} 

Die ersten beiden cin funktionieren (der Name und NumClub) und wenn er kommt in der cin für die adresse es geht rein und geht direkt in den cout des mains. Ich kann nichts für die Adresse schreiben.

Ich habe versucht, die klar, ich habe einen zweiten Puffer für die getline versuchen. Ich verstehe nicht, was passiert ist.

Danke für Ihre Hilfe!

Antwort

2

Sie haben einige Probleme hier:

  1. cin >> nc nicht die nachlaufende Endlinie aus dem Strom nicht entfernt. Also die nächste s.getline (Buffer, 20) liest eigentlich dieses \ n Zeichen und endet daher, bevor etwas anderes eingegeben wird.

  2. Es scheint, dass Sie denken, dass Clear() löscht den restlichen Inhalt des Streams, aber das ist nicht der Fall. Es setzt nur die Flaggen zurück. Deshalb ist das \ n immer noch im Stream.

  3. cin >> nc analysiert nur übereinstimmende Eingaben. Wenn also jemand keine Nummer eingibt, ist er zusammen mit dem \ n immer noch im Stream.

  4. Verwendung eines einzelnen Operators >> Aufruf zum Anfordern mehrerer Eingaben vom Benutzer ist sehr ungewöhnlich, da es sich um einen unerwarteten Nebeneffekt handelt. Denken Sie an jemanden, der den Operator >> verwendet, um aus einem Dateistream zu lesen. Das wäre seltsam ...

Mein Vorschlag: Statt einen Betreiber mit >>, erstellen Sie eine Elementfunktion in dem Club zum Beispiel „fillFromStdin()“ genannt. Besser wäre eine dedizierte Fabrik, aber das ist in Ordnung für den Anfang. Vermeide es dann, getline und den Operator >> zu mischen. Dies hat einige ugly side effects. Besser nur getline verwenden und anschließend die Eingabe analysieren.

+0

Oh ok! Es ist klarer in meinem Kopf! Danke für Ihre Hilfe, ich sehe die Veränderung, die ich tun muss! –