vector problem
-
aber wieso geht dann die erset eingabe un die folgenden nichtmehr.
und 2. geht es ohne diese funktion nicht da sonst die eingabe komplett übersprungen wird und bis jetzt hat er dadurch noch nie einen buchstaben ignoriert.erste eingabe wird mit dem obrigen code einfach übersprungen und bleibt somit leer.
lösst das problem also nicht.
aber schonmal danke für die hilfe.
-
*push*
es ist wichtig..bräuchte echt ne antwort darauf
-
|-|/-\73 schrieb:
*push*
es ist wichtig..bräuchte echt ne antwort darauf*auf den eigenen Code verweist*
Der funktioniert bei mir einwandfrei!Zeig also her, was du genau gemacht hast.
Grüssli
-
soll mal zur verwaltung von cd-archiven da sein, is aber halt noch am ganz am anfang.
das ist die komplette Methode der klasse database
#ifndef DATABASE_H_INCLUDED #define DATABASE_H_INCLUDED #include <iostream> #include <string> #include <vector> #include <fstream> using namespace std; class database{ private: int release; string interpret; string album; int track_numbers; vector<string> track_names; public: database* database::set_data(){ cout << "Interpret: "; getline(cin,interpret); cout << endl; cout << "Album: "; getline(cin,album); cout << endl; if(release == 0000){ cout << "Erscheinungsjahr: "; cin >> release; cout << endl;}; cout << "Anzahl der Lieder: "; cin >> track_numbers; cout << endl; string cache; for(int i=1; i <= track_numbers; i++){ cout << i << ": "; cin.ignore(); getline(cin,cache); track_names.push_back(cache); cout << track_names.back(); cout << endl; }; return this; }; }; #endif // DATABASE_H_INCLUDEDund hier noch der dazugehöre code der main.cpp
#include "database.h" int main() { database* dbptr; database cd; dbptr = cd.set_data(); getchar(); return 0; }alles bissl komisch ich weiß. also nicht wundern.
-
Ich empfehle dir nochmals meinen Code anzuschauen, denn du hast den meinigen nicht umgesetzt und immer noch den alten drin.
Zudem noch ein paar Tipps:
Du solltest bei den Abfragen prüfen, ob auch das richtige eingegeben wurde. Eine einfache Art, wie man sowas machen kann:template<typename ValueT> void input(std::string const& text, std::string const& error, ValueT& value) { std::cout << text; std::cin >> value; while(!std::cin) { std::cout << error << std::endl << text; std::cin >> value; } } template<typename ValueT, typename CheckT> void input(std::string const& text, std::string const& error, ValueT& value, CheckT check) { std::cout << text; std::cin >> value; while(!std::cin || !check(value)) { std::cout << error << std::endl << text; std::cin >> value; } } // Verwendung: bool check(int i) { return i < 1000 && i > 0; }; int main() { // Nur ganzzahlige Zahlen aktzeptieren int i; input("Gib die Zahl her!", "Hey, nur zahlen!", i); // Nur ganzzahlige Zahlen in einem Bereich von 1 - 999 input("Gib die Zahl her!", "Hey, die ist ungültig!", i, &check); return 0; }Grüssli
-
ich haben deinen code getestet und er brachte das ergebniss das die erste eingabe übersprungen wurde.
ich habe extra meinen code gepostet da du meinstest er würde perfekt bei dir funktionieren.
danke für den typ wie ich die eingaben auf korektheit überprüfen kann, das ist eh das nächste was gemacht werden müsste(war deswegen au noch nicht vorhanden)
-
|-|/-\73 schrieb:
ich haben deinen code getestet und er brachte das ergebniss das die erste eingabe übersprungen wurde.
ich habe extra meinen code gepostet da du meinstest er würde perfekt bei dir funktionieren.
Ich sagte, dass mein Code perfekt funktioniert bei mir. Also musst du meinen Code falsch implementiert haben und deshalb sollst du den mal zeigen. Also wie du meinen Code implementiert hast.
Ich habe es gerade nochmals nachgeprüft. Mein Code funktioniert! Da wird nichts übersprungen.
Grüssli
-
database* database::set_data(){ cout << "Interpret: "; getline(cin,interpret); cout << endl; cout << "Album: "; getline(cin,album); cout << endl; if(release == 0000){ cout << "Erscheinungsjahr: "; cin >> release; cout << endl;}; cout << "Anzahl der Lieder: "; cin >> track_numbers; cout << endl; std::cin.ignore(std::cin.rdbuf()->in_avail()); std::cin.clear(); std::string cache; for(int i = 1; i <= track_numbers; i++) { std::cout << i << ": "; std::getline(std::cin, cache); track_names.push_back(cache); std::cout << track_names.back();// nur zu Testzwecken noch drin //std::cout << std::endl; }; return this; };so hab ich das implementiert. bestimmt is das falsch un deswegen wird der erste wert übersprungen.
-

Ich frage vielleicht mal anders, was für einen Compiler und eine Standardbibliothek verwendest du? Macht keinen Sinn, dass dies nicht funktionieren sollte.Grüssli
-
was für bibliotheken ich nutze steht hier
|-|/-\73 schrieb:
#include <iostream> #include <string> #include <vector> #include <fstream>und compiler is GCC.
-
will mir den keiner helfen oder hat niemand eine antwort darauf?
-
|-|/-\73 schrieb:
will mir den keiner helfen oder hat niemand eine antwort darauf?
Dann zeig mal, wo genau dein Problem liegt.
-
|-|/-\73 schrieb:
will mir den keiner helfen oder hat niemand eine antwort darauf?
Also:
1. Ich hatte gefragt, welche Standardbibliothek du verwendest, nicht welche Header. Denn vielleicht ist die Bibliothek, welche du verwendest, verbuggt oder sowas ähnliches.
2. Dein angegebenen Code, funktioniert bei mir einwandfrei und sollte auch einwandfrei funktionieren. Daher kann nur Punkt 1 zutreffen, also das deine Standardbibliothek einen Bug hat oder dass du es nicht so umgesetzt hast, wie du es zeigst.
3. Alternativ könntest du auch mal das hier versuchen:
std::cin.ignore(std::cin.rdbuf()->in_avail());
ersetzen durch:
std::cin.sync();Mehr fällt mir dazu nicht mehr ein.
Grüssli
-
is vll ne dumme frage..aber wo sehe ich was ich für ne standartbibliothek verwende??
BIG THX...die funktion std::cin.sync(); hat geholfen.
es funktioniert nun.
-
|-|/-\73 schrieb:
is vll ne dumme frage..aber wo sehe ich was ich für ne standartbibliothek verwende??
Standardinclude path. Dort sind die zu finden. Also von der Entwicklungsumgebung. Such einfach mal z.b nach 'vector'.