Dynamischer Vector mit Objekt wird nicht befüllt ?



  • Hey liebe Community, ich habe ein Problem.
    Dies ist folgendes : Ich möchte meinen Vector vom Typ mensch mit der Eingabe des Benutzers füllen, aber ich mache irgendetwas falsch, die Eingaben werden nicht gespeichert. Weiß einer von euch woran das liegt ?

    #include <iostream>
    #include <vector>
    #include <string>
    
    using name = std::string;
    using straße = std::string;
    
    struct mensch{
    	name name{};
    	straße straße{};
    };
    
    int main(){
    
    	//Globale Variablen
    	std::vector<mensch> kunden;
    	mensch neuerkunde;
    
    	//Neuen Kunden hinzufügen
    	kunden.push_back(neuerkunde);
    
    	std::cout << "Name : ";
    	std::getline(std::cin, static_cast<std::string> (kunden.at(kunden.size()-1).name));    //kunden.size()-1 da es bei 0 anfängt
    
    	std::cout << "Straße : ";
    	std::getline(std::cin, static_cast<std::string> (kunden.at(kunden.size()-1).straße));
    
    return 0;
    }
    

    Danke für eure Hilfe 🙂



  • Was sollen die std::string Casts?
    Woraus nimmst du die Annahme, dass die Eingaben nicht gespeichert werden?



  • Die static_cast ´s waren da wohl wirklich fehl am Platz.
    Wenn ich mir mittels der folgenden Funktion den Namen ausgeben lassen möchte funtkioniert dies nicht, genau das gleich bei einem einfachen

    std::cout << kunden.at(0).name;
    

    bzw.

    std::cout << kunden.at(kunden.size() - 1).name;
    

    Funktion :

    bool SaveIntVectorToFile(const std::vector<mensch> input){
    
    	std::ifstream Quelldatei;
    	Quelldatei.open("Kunden.txt", std::ios_base::out | std::ios_base::app);
    
    	for (int i{ 0 }; i < input.size(); i++){
    
    		std::cout << std::endl << input.at(i).name;   //funktioniert nicht
    		std::cin.get();
    
    		std::string name = input.at(i).name;
    		for (unsigned int nameint{ 0 }; nameint < name.size(); nameint++){
    			std::cout << name.at(nameint); //ebenfalls nicht
    			Quelldatei.putback(name.at(nameint)); //nichts wird geschrieben
    		}
    
    		Quelldatei.putback('\n');
    
    	}
    
    	 Quelldatei.close();
    	return true;
    }
    


  • Was ist denn jetzt deine Frage? Die beiden Schnipsel haben bis auf den vector nichts miteinander zu tun.

    So sollte das lesen funktionieren:

    #include <iostream>
    #include <vector>
    #include <string>
    
    using name = std::string;
    using straße = std::string;
    
    struct mensch{
        name name{};
        straße straße{};
    };
    
    int main(){
    
        //Globale Variablen
        std::vector<mensch> kunden;
        mensch neuerkunde;
    
        std::cout << "Name : ";
        std::getline(std::cin, neuerkunde.name); 
    
        std::cout << "Straße : ";
        std::getline(std::cin, neuerkunde.straße);
    
        //Neuen Kunden hinzufügen
        kunden.push_back(neuerkunde);
    
        std::cerr << kunden[0].name << "\n";
    
    }
    


  • Super ! Vielen dank an euch, ich hatte einen kleinen Denkfehler. Unszwar ich habe zuerst einen neuen Kunden an den Vector dran gehängt und diesen dann editiert, warum nicht gleich den Kunden editieren und erst dann dranhängen ? So hab ichs jetzt gelöst :

    std::cout << "Name : ";
    	std::getline(std::cin, neuerkunde.name);    
    
    	std::cout << "Straße : ";
    	std::getline(std::cin, neuerkunde.straße);
    
    	//Neuen Kunden hinzufügen
    	kunden.push_back(neuerkunde);
    

    So funktioniert die ausgabe über std::cout auch 🙂
    Vielen dank euch allen 🙂
    Mein hauptsächliches Problem lag darin das ich den neuen Kunden nicht mehr auslesen konnte, bzw. ich nicht wusste ob er überhaupt eingelesen wurde, hat sich aber erledigt, siehe code oben 😉



  • manni66 schrieb:

    std::cerr << kunden[0].name << "\n";
    

    Ich bin dir sehr dankbar für deine Hilfe, erst durch deinen Code hab ich meinen Fehler entdeckt 🙂 aber ich glaube man verwendet cerr doch nur für Errors, oder nicht ?



  • TheCppTim schrieb:

    manni66 schrieb:

    std::cerr << kunden[0].name << "\n";
    

    Ich bin dir sehr dankbar für deine Hilfe, erst durch deinen Code hab ich meinen Fehler entdeckt 🙂 aber ich glaube man verwendet cerr doch nur für Errors, oder nicht ?

    Ich benutze cerr oft für temporäre Debugausgaben. Da ich das hier als eine solche betrachte, hab ich es automatisch so benutzt. Hat keine weitere Bedeutung ...


Anmelden zum Antworten