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 einfachenstd::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 ...