problem mit dem auto(markt) :), brauche hilfe mit list<> push und pop!
-
hi ich wollte mal ne kleine uebung zu listen machen, und habe folgendes beispiel konstruiert. es funktioniert auch, bis auf einen kleinen hacken
//--------------------------------------------------------------------------- #include <iostream> #include <list> using namespace std; #pragma hdrstop #pragma argsused void line( int c ) { for( int i = 0; i < c; ++i ) { cout << "="; } cout << endl; } class car { public: car(); ~car(); void buy( char *_Name ); void sell( char *_Name ); void myCars(); private: list<char> autos; list<char>::iterator iter; int _autos; char _name[64]; }; car::car() { _autos = 0; _name[0] = 0; } car::~car() { _autos = 0; _name[0] = 0; } void car::buy( char *_Name ) { strcpy( _name, _Name ); _autos++; cout << " Sie haben sich das Auto [ " << _name << " ] gekauft und\n" " besitzen nun " << _autos << " Auto(s)." << endl; autos.push_back( *_name ); } void car::sell( char *_Name ) { strcpy( _name, _Name ); _autos--; cout << " Sie haben das Auto [ " << _name << " ] vergekauft und\n" " besitzen nun " << _autos << " Auto(s)." << endl; if( autos.size() ) { autos.remove( *_name ); } } void car::myCars() { line( 50 ); for( iter = autos.begin(); iter != autos.end(); ++iter ) { cout << *iter << endl; } line( 50 ); } int main(int argc, char* argv[]) { char kaufen[64]; char verkaufen[64]; int vote; bool done = false; car *p = new car; line( 80 ); cout << " Automarkt " << endl; line( 80 ); do { cout << " Was fuer ein Auto kaufst du dir?\n"; cout << " Name: "; cin >> kaufen; line( 50 ); p->buy( kaufen ); line( 80 ); cout << " Moechtest du ein Auto verkaufen oder den Automarkt verlassen?\n" " Nutze folgende Optionen:\n" " [Verkaufen - 1 ] / [Kaufen - 2 ] / [Meine Autos - 3 ].\n" " [Verlassen - 4 ]"; cout << " Wahl: "; cin >> vote; switch( vote ) { case 1: { cout << " Was fuer ein Auto willst du verkaufen ?\n"; line( 50 ); cout << " Name: "; cin >> verkaufen; p->sell( verkaufen ); line( 80 ); break; } case 2: { done = false; break; } case 3: { cout << " Deine momentanen Autos sin: " << endl; p->myCars(); break; } case 4: { done = true; } } } while( !done ); return 0; }wenn ich mit der funktion myAutos() meine autos anschaun will sehe ich das immer nur der erste buchstabe in die liste gepackt wurde und nicht der ganze name, also statt Mercedes nur das M. woran liegt das???
-
Liegt sehr wahrscheinlich daran, dass deine liste 'autos' auch nur Zeichen und keine Strings speichert.
-
hmm und wenn ich list<char*> mache, dann wird zwar der ganze name gespichert, aber will ich dann noch nen auto kaufen, wird der erste name irgendwie mit dem neuen ueberschrieben...also
1. eingabe:
Mercedes2. eingabe:
BMWdas resultat ist dann:
BMW
BMW3. eingabe:
LOLresultat:
LOL
LOL
LOLusw., was mach ich falsch?
-
Du speicherst jedesmal den zeiger auf den selben Puffer und überschreibst diesen jedes mal.
Nimm doch einfach std::string, damit ersparst du dir diese (und weitere) Probleme gleich.