S
@yxcvbn sagte in Muss die Werte von dem Buch einlesen aber bekomme es nicht richtig hin mit dem Vector :
@Schlangenmensch
Wenn ich mir den Code von adii950`s erstem Beitrag und vor allem die Zeilen 73-84 anschaue, ist eine Lösung des von Dir deklariertem Gesamtproblems wohl eher zweitrangig .
Es mag sein, dass @adii950 noch C++ Grundlagen fehlen, aber ich bin der Meinung, dass man C++ Nachwuchs auch direkt zeigen muss, wie man Software ordentlich designed. Viele Probleme mit denen sich Anfänger sonst nämlich irgendwann rum schlagen, treten dann gar nicht auf.
@yxcvbn sagte in Muss die Werte von dem Buch einlesen aber bekomme es nicht richtig hin mit dem Vector :
Weil ich heute zu geizig für const bin.
Sollte man, gerade in einem öffentlichen Beitrag, nicht sein. Das sehen nur Leute, die das nicht beurteilen können und das nach machen.
Ich habe ein Projekt geerbt, in dem 20 Jahre keinerlei const verwendet wurde. Das macht keinen Spaß zu debuggen.
@yxcvbn sagte in Muss die Werte von dem Buch einlesen aber bekomme es nicht richtig hin mit dem Vector :
Gefällt Dir "neues_buch_eingeben" besser?
Auch dann würde es mir besser gefallen, wenn die Funktion ein Buch zurück gibt und nicht auf einer Vektor Referenz hantiert.
@yxcvbn sagte in Muss die Werte von dem Buch einlesen aber bekomme es nicht richtig hin mit dem Vector :
Entweder bist Du blöd oder ich.
Kann schon sein, dass ich blöd bin. Aber ich würde gerne auch neue Buchobjekte erstellen können, wenn ich kein Terminal zur Verfügung habe. Überhaupt, erwarte ich von einer Funktion die ein neues Buchobjekt erstellen sollte, eigentlich keine Ausgabe irgendwo.
Für mich sind std::cin und std::cout auch globale Objekte, die man nur spärlich einsetzen sollte, da man im Zweifel deren Zustand nicht kennt und die es schwer machen Unittests zu schreiben. Ich würde zumindest Stream Objekt Referenzen in die Funktion geben die dann bei bedarf mit std::cin und std::cout aufgerufen werden können (ähnlich wie std::getline da macht).
Als alternative
buch neu(std::istream& in, std::ostream& out)
{
buch b;
out << "Bitte titel eingeben:\n";
getline(in, b.titel);
out << "Bitte autor eingeben:\n";
getline(in, b.autor);
return b;
}
Finde ich auch noch nicht schön, ist immer noch Eingabe und Ausgabe in einer Funktion, aber damit ließen sich zumindest Unit Test schreiben.
User Eingaben über die Konsole zu verarbeiten ist irgendwie nie schön und finde ich daher auch immer etwas unpassend, wenn es darum geht jemandem C++ beizubringen. Auf der anderen Seite sieht man da recht schnell Ergebnisse.
Besser wäre es wahrscheinlich sich ein Eingabe Format zu überlegen, wie
<Buch Titel>;<Autor>; <Jahr>...
Das ganze in einer Zeile einzulesen und dann zu parsen. Dann hat man aber das Problem, was macht man wenn ein ";" im Titel vorkommt... wieder extra Fälle, die den Code umfangreicher machen. Dafür kann man das dann auch verwenden um aus einer CSV direkt eine ganze Liste Bücher einzulesen.