Problem mit mail Programm

Hallo zusammen,

ich muss für meine Ausbildung ein Programm schreiben, dass zum verschicken von Briefen und Paketen dienen soll. Jetzt hab ich mit nem Freund zusammen was hingezimmert, aber wir haben immer noch ein Problem bei der Eingabe der Adressdaten, weil er manche Eingabfelder überspringt, leider finden wir den Fehler nicht, vielleicht kann uns hier jmd. helfen.

Danke schon mal im voraus.

//Mailprogramm

#include
#include
using namespace std;

class Address
{

public :
string name,
street,
city,
country;

Address () {}; // Konstruktor ohne Elementenübergabe

Address ( const string& na, const string& st, const string& ci,
const string& co= „Deutschland“)
: name(na) , street(st) , city (ci) , country (co)
{};

// Funktionen von Addresse ----------------------------------------------------------------------------------------------

bool isValid() // Methode zur Überprüfung der Elemente inkl. Bedingungen zur Ausgabe
{
return (name != „“ && street != „“ && city != „“ && country != „“);
};

const string getName() { return name;};
const string getStreet() {return street;};
const string getCity() { return city;};
const string getCountry() {return country;};

void print ()
{
cout > nam;
cout > strasse;
cout >stadt;
cout >land;
Address test (nam,strasse,stadt,land);

if (test.isValid()==true) // Funktion wird auf Inhalte überprüft
{
name=nam; // Klassendatenelemente erhalten Eingabewerte
street=strasse;
city=stadt;
country = land;
return true;
}
else
return false; // Bei fehlerhaften Eingabewerten wird ‚false‘ ausgegeben (Attribute des
// Objektes ‚test‘ dürfen nicht verändert werden)
};

};

class Mail

{
protected: // Geschützte Datenelemente und Funktionen, Zugriff nur durch Mail selbst oder
// von Mail abgeleitete Klassen
long id;
Address from,to;
bool delivered;

public:

Mail (long i) : id(i) , delivered (false) {}; // "Konstruktor für Vererbung

Mail (long i, const Address& adrto, const Address& adrfrom)
: id(i) , from(adrfrom) , to(adrto) , delivered(false) {};

bool isDelivered() const { return delivered; } // Test ob Post ausgeliefert

bool deliver()
{
if (to.isValid())
{
delivered = true;
return true;
}
else
return false;
}

// Funktionen von ‚Mail‘ --------------------------------------------------------------------------

virtual void print();

bool scanfrom() // Differenzierung Absender/Empfänger, mit Empfänger als Bedingung
{ // für ‚deliver‘
cout Einen Brief aufgeben" Ein Packet aufgeben" Alle Postsendungen ausliefern" Die Liste ausdrucken " Beenden " > antwort;

if (antwort==1)
{
Letter *P=new Letter(i,Dagobert,Donald,false);
P->scanfrom ();
P->scanto ();
Liste[i]=P;
i++;
}
if (antwort==2)
{
Parcel *K=new Parcel(i,Dagobert,Donald);
K->scanfrom ();
K->scanto ();
Liste[i]=K;
i++;

}
if (antwort ==3)
{
int k=i;
do {
Liste [k-1]->deliver();
k–;
}while (k>0);

cout print();
j–;
}
while (j>0);
}

else{};

}
while (antwort !=0);

return 0;

}

hallo,

was mir so eben auffaellt, ist:
in Adresse::scan() schreibt ihr:

cin \>\> name; // gut

wenn du nun das gleiche bei Strasse/Hausnummer machst,
stolperst du ueber das cin, das bricht ja ab, sobald ein Leerzeichen getippt wird. so wird dann die Hausnummer in das folgende getippt, und damit eins uebersprungen, das duerfte es wohl sein.
Besser waere das Muster:

cin.getline(, "Bahnstrasse 24");

Wenn dann bei „name“ jemand „Max Meier“ schreibt, haste natuerlich den gleichen Salat wieder.

Ach, und die Member-Variablen in der Klasse sollten besser „private“ sein, Zugriff nur uber die funcs.
die getName() etc sollten besser eine const-Referenz turueck geben,
is weniger Aufwand für die Maschine, Du sparst dann unnoetige Konstruktor/Destruktor - Aufrufe, also:

const string& getName() {return name;}

viel glueck!
Martin