Ergebnis 1 bis 11 von 11
-
23.10.2012, 13:05 #1xallex
C++ Variablen nacheinander eingeben
Ich habe folgendes Problem. Ich möchte ein Programm Schrieben, dass in dem man nacheinander Variablen verschiedener Typen eingibt und sie dann ausgegeben bekommt.
Hier ist mein (nicht fertiger Code):
Code:{ double doubleeingabe; int inteingabe; string stringeingabe; char chareingabe; bool booleingabe; //Eingabe und Verarbeitung: cout<<"int?"<<endl; cin>>inteingabe; cout<<inteingabe<<endl; cout<<"double?"<<endl; cin>>doubleeingabe; cout<<doubleeingabe; system("Pause"); }
inteingabe: 1.2
intausgabe: 1
doubleausgabe: 0.2
Kann man das irgendwie verhindern?
-
-
23.10.2012, 14:01 #2Kelshan
AW: C++ Variablen nacheinander eingeben
Die vermutlich sicherste Methode für sowas: Lies die Eingabe generell als String ein, und parse es dann selbst in den gewünschten Datentyp. Zum Parsen gibt es in C++ auch schon Funktionen wie atoi (wandelt ein char array in ein int um). Entsprechend gibt es auch atof zur Umwandlung in ein double.
Wie genau die Methoden reagieren wenn man z.B. einen String der einen Komma-Wert beinhaltet versucht per atoi in einen Integer zu parsen weiß ich gerade nicht mehr aus dem Kopf. Im schlimmsten Fall gibt die Methode glaube ich einfach 0 zurück, aber das musst du halt ausprobieren.
In jedem Fall kannst du den String ja im Fall der Fälle vor dem Parsen einfach entsprechend manipulieren (z.B. ein Komma suchen und alles ab dem Komma wegschmeißen) und die Probleme somit auch umgehen.
-
23.10.2012, 15:44 #3xallex
AW: C++ Variablen nacheinander eingeben
Danke für deine schnelle Antwort. Leider ist die Aufgabe aber, dass ich diese Variablentypen einlesen lasse. Das hätte ich erwähnen sollen.
-
23.10.2012, 16:40 #4Kakashi Hatake
AW: C++ Variablen nacheinander eingeben
das endl kannst du dir sparen, mach am besten in der ausgabe innerhalb der "" ein \n zb:
cout<<"int?\n";
das ist sauberer und sollte in c++ auch ohne probleme funktionieren (is bei mir schon ne weile her^^)
zudem musst du deine variablen nicht nur deklarieren sondern auch initialisieren, ansonnsten steht schon irgend nen schrott aus dem speicher drinn, das kann böse folgen haben und auch dein problem auslösen
das sollte dann so aussehen:
double doubleeingabe=0;
int inteingabe=0;
string stringeingabe="";
char chareingabe='';
bool booleingabe=null;
-
23.10.2012, 16:55 #5Kelshan
AW: C++ Variablen nacheinander eingeben
Zum eigentlichen Problem:
Man kann auch einfach den restlichen Eingabepuffer löschen, dazu hat cin passende Memberfunktionen. Zum Beispiel so:
Code:{ double doubleeingabe; int inteingabe; string stringeingabe; char chareingabe; bool booleingabe; //Eingabe und Verarbeitung: cout<<"int?"<<endl; cin>>inteingabe; cin.clear(); cin.ignore(cin.rdbuf()->in_avail()); cout<<inteingabe<<endl; cout<<"double?"<<endl; cin>>doubleeingabe; cout<<doubleeingabe; system("Pause"); }
cin.ignore(...) wirft die angegebene Zahl an Zeichen aus dem Eingabepuffer weg.
cin.rdbuf()->in_avail() gibt die Anzahl der vorhandenen Zeichen im Eingabepuffer aus.
Die Zeile wirft also insgesamt so viele Zeichen weg, wie noch übrig sind.
Wenn du beim Einlesen des Integers z.B. 5.235 eingibst wird nur die 5 für die Integer Variable verwendet und der Rest des Eingabebuffers (.235) bleibt vorhanden und automatisch für das nächste cin weiter verwendet. Durch das obige ignore vor dem nächsten cin wird dies eben verhindert.
-
23.10.2012, 18:54 #6ButterZ
AW: C++ Variablen nacheinander eingeben
Also woran das liegt kann ich dir nicht sagen, denn dies ist kein Typischer Fehler.
Kelshans Lösung ist mir für dieses Problem viel zu aufwendig.
Das geht viel leichter an sowas sollte man sich nicht den Kopf zerbrechen.
Du kannst das Problem wahrscheinlich über 2 Wege lösen.
Einfach: Mit sehr hoher Sicherheit tritt der Fehler nicht auf wenn du scanf() verwendest.
Umständlich: Ich programmiere mit DevC++. Da hab ich mit deinem Code das Problem nicht. Evt. IDE wechseln.
MfG Freddy
-
23.10.2012, 20:06 #7Kelshan
AW: C++ Variablen nacheinander eingeben
Na ja, so aufwändig finde ich die zwei Zeilen Code nun nicht.
Möglich ist durchaus, dass sich Dev C++ an dieser Stelle anders verhält (als VC++). Allerdings ist es wohl eine Aufgabe für irgendeine Art Schule, und dort dürfte relativ eng begrenzt sein was man verwenden darf oder soll und was nicht. Somit könnte ein Wechsel der IDE oder der verwendeten Funktion helfen das Problem zu umgehen, das hilft aber nix wenn es in der Schule (o.Ä.) dann nicht funktioniert.
-
23.10.2012, 21:38 #8ButterZ
AW: C++ Variablen nacheinander eingeben
Natürlich, an und für sich hast du absolut recht.
Mit Aufwand meinte ich jetzt direkt überhaupt einen Weg zu suchen das ganze Lauffähig zu machen. Mit scanf() als Alternative spart man einfach Zeit.
Ich habe schon oft mit cin schlechte Erfahrungen gemacht, welche wiederum mit scanf() immer weggefallen sind.
Und ich habe schon viele Dinge getestet welche von der Logik her hätten funktionieren müssen,
und dennoch hat cin richlich Fehler produziert. Aber das ist wie gesagt Erfahrungssache.
Ich würde ja fast zu 95% sagen das dein Lösungsvorschlag das Problem in diesem Fall (wenn auch unerklärlicher Weise)
nicht helfen wird, weil sich dies mit meinen Erfahrungen decken würde.
Ich hoffe wir werden aufgeklärt ob es nun funktioniert hat.
-
23.10.2012, 22:48 #9Kelshan
AW: C++ Variablen nacheinander eingeben
Nu ja ich hatte es fix ausprobiert, und bei mir hat es funktioniert. Würde mich aber natürlich auch interessieren, ob das bei ihm dann auch der Fall ist.
-
24.10.2012, 19:45 #10xallex
AW: C++ Variablen nacheinander eingeben
Erstmal danke für die vielen Antworten. Das Problem konnte mit dem genannten Befehl
Code:cin.clear(); cin.ignore(cin.rdbuf()->in_avail());
-
24.10.2012, 20:53 #11ButterZ
Ähnliche Themen
-
C++ Variablen aus Datei einlesen?: Hey Leute, ich will Variablen nicht eingeben, sondern aus einer Datei einlesen. Jetzt bin ich hier schon eine Stunde am herrumprobieren, aber... -
HTML/PHP: Variablen an Seite Übergeben: Hallo Ich moechte per HTML/PHP und POST Variablen an eine Seite übergeben. Bisher hab ich das per html formular gemacht. Nun hab ich da aber auch... -
Einzelne Videos nacheinander abspielen: Wie kann ich die PS3 so einstellen das sie Videos aus einem Ordner nacheinander abspielt ? Sie spielt ja immer nur das ausgewählte Video ab,und geht... -
OpenOffice 3.0 - Texte nacheinander einblenden lassen, ohne Folienwechsel: Hi, Ich hätte da mal eine Frage bezüglich der Präsentationen in OpenOffice. Da ich für Französisch eine Powerpoint Präsentation halten muss,... -
Ein Programm um die Fotos nacheinander zu erscheinen.: Hey, hab da ne Frage.... meine Schester nervt mich schon seit einigen Tagen, dass ich mit ihren Fotos so etwas soll machen und das wäre: Also sie...
Schlafen ist kein Hobby.... 7
User vs. Mods