structure char array mit getline einlesen geht nicht
-
Hallo,
folgender Code:
struct Buch { char autor[20]; char vorname[15]; char buchtitel[30]; int jahr; float preis; }; int saetze; cout << "Wieviele Datensätze erstellen? : "; cin >> saetze; Buch buchTab[saetze]; for(int i = 0; i < saetze; ++i) { cout << i + 1 << ". Datensatz: " << endl; cout << "---------------" << endl; cout << "Autor (Nachname): "; cin >> buchTab[i].autor; cout << "Vorname: "; cin >> buchTab[i].vorname; cout << "Buchtitel: "; cin.getline(buchTab[i].buchtitel, 30); // hier läuft was schief cout << "Jahr: "; cin >> buchTab[i].jahr; cout << "Preis: "; cin >> buchTab[i].preis; cout << endl; }Die Zeile
cin.getline(buchTab[i].buchtitel, 30);läuft irgendwie schief. Irgendwie will das Programm dann keine Eingabe haben, sondern überspringt die getline-Eingabe einfach. Warum ist das so?
-
Hallo!
Bitte keine Fett-Tags in Code-Tags benutzen, dann funktioniert letzteres nicht.struct Buch { char autor[20]; char vorname[15]; char buchtitel[30]; int jahr; float preis; }; int saetze; cout << "Wieviele Datensätze erstellen? : "; cin >> saetze; Buch buchTab[saetze]; for(int i = 0; i < saetze; ++i) { cout << i + 1 << ". Datensatz: " << endl; cout << "---------------" << endl; cout << "Autor (Nachname): "; cin >> buchTab[i].autor; cout << "Vorname: "; cin >> buchTab[i].vorname; cout << "Buchtitel: "; cin.getline(buchTab[i].buchtitel, 30); cout << "Jahr: "; cin >> buchTab[i].jahr; cout << "Preis: "; cin >> buchTab[i].preis; cout << endl; }Vielleicht kommst du mal auf die Idee, statt C-Arrays ordentlich std::string zu benutzen. Dann schreibt man nämlich
std::getline(std::cin, meinString);Bitte auch beim nächsten Mal vielleicht ein kurzes, kompilierbares Beispiel reproduzieren.
Außerdem fehlen dir möglicherweise Grundlagen, sieh dir mal ein Paar gute Bücher an.Was dein Problem angeht: Schreib vor der
getline-Zeilestd::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
-
Übrigens sind VLAs ein GCC-Feature, also tu uns den Gefallen und nimm einfach
std::vector.
-
Könnte man auch einen Zeiger in eine struct-Anweisung einbauen?
Ich möchte die Information über getline in ein char-Array speichern.
char *Txt; getline(Txt, 30);Geht das auch, dass ich den Zeiger Txt in eine struct-Anweisung packe?
(Ich bin übrigens C++ Neuling)
Warum geht folgendes
char zeile[20]; cin.getline(zeile, 19);und warum geht es mit einer struct-Anweisung nicht?
-
Was ist eine struct-Anweisung?
-
Das da:
struct Buch { char autor[20]; char vorname[15]; char buchtitel[30]; int jahr; float preis; };
-
ubik schrieb:
Das da:
... nennt sich Definition, ist aber keine Anweisung. Das C++-Buch deiner Wahl sollte dir die richtigen Begrifflichkeiten deutlich machen - damit du die Unterschiede kennst und wir uns gegenseitig verstehen, d.h. die gleiche Sprache sprechen.
Zeile 14 enthält das von Sone angesprochene VLA, was kein gültiges C++ ist - auch wenn dein Compiler es vielleicht schluckt.
ubik schrieb:
... läuft irgendwie schief. Irgendwie ...
"Irgendwie" ist das keine besonders glückliche Fehlerbeschreibung. Was sind genau deine Eingaben, und was erwartest du? Was sagt dir der Debugger? Lies dir bitte auch die Links in meiner Signatur durch.
-
Dann ist das Buch, das ich gerade durchgehe, einfach nur Schrott und veraltet.
Ich möchte mit
char buchtitel[30]einen String mit Leerzeichen eingeben können (z. B. "Grundlagen der C++ Programmierung"). Ich erwarte, dass er solche Eingaben in den char-String buchtitel speichert.
Das Buch behandelt im Moment noch keine Vektoren, bis jetzt auch nur Strings in Form von char-Arrays.
-
ubik schrieb:
Das Buch behandelt im Moment noch keine Vektoren, bis jetzt auch nur Strings in Form von char-Arrays.
Sicher, dass das kein C-Buch ist? Falls ja: Wirklich damit aufhören. Dringend. Siehe zweiten Link in meiner Signatur für Buchtipps.
ubik schrieb:
Ich möchte mit
char buchtitel[30]einen String mit Leerzeichen eingeben können (z. B. "Grundlagen der C++ Programmierung"). Ich erwarte, dass er solche Eingaben in den char-String buchtitel speichert.
cin.getline(buchtitel, 30);Und tu das nicht. Nimm std::string, außer du hast einen enorm guten Grund, dies nicht zu tun. (std::string nicht zu kennen ist kein guter Grund
)
-
SeppJ schrieb:
Nimm std::string, außer du hast einen enorm guten Grund, dies nicht zu tun.
Ist eine masochistische Veranlagung ein solcher Grund?

-
Sone schrieb:
SeppJ schrieb:
Nimm std::string, außer du hast einen enorm guten Grund, dies nicht zu tun.
Ist eine masochistische Veranlagung ein solcher Grund?

Ja, aber dafür gibt es bessere Befriedigungsmethoden.
-
Ok, danke für alle eure Antworten.
Das Buch ist offensichtlich schrott und veraltet. Es handelt sich um "Grundkurs Software Entwicklung mit C++" von Dietrich May.
Thema ist erledigt.