Ergebnis 1 bis 11 von 11
  1. #1
    xallex xallex ist offline
    Avatar von xallex

    C++ Variablen nacheinander eingeben

    Hallo.
    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");
    }
    Das Problem ist, dass, wenn ich für den Integer eine Kommazahl eingebe, werden die Nachkommazahlen abgeschnitten (das soll auch so sein), nur leider werden sie dann in die Double gegeben, sodass das Programm diese Eingabe überspringt kann. Bsp.:
    inteingabe: 1.2
    intausgabe: 1
    doubleausgabe: 0.2

    Kann man das irgendwie verhindern?

  2. Anzeige

    C++ Variablen nacheinander eingeben

    Schau dir mal diesen Bereich an. Dort ist für jeden was dabei!
  3. #2
    Kelshan Kelshan ist offline
    Avatar von Kelshan

    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.

  4. #3
    xallex xallex ist offline
    Avatar von xallex

    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.

  5. #4
    Kakashi Hatake Kakashi Hatake ist offline
    Avatar von Kakashi 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;

  6. #5
    Kelshan Kelshan ist offline
    Avatar von Kelshan

    AW: C++ Variablen nacheinander eingeben

    Zitat Kakashi Hatake Beitrag anzeigen
    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;
    Daran ist nichts sauberer, und endl gibt es nicht ohne Grund. (Macht im Grunde dasselbe wie \n, führt dazu jedoch noch einen flush aus.) Auf jeden Fall gibt es keinen Grund das wegzulassen oder extra zu ändern. Tatsächlich ist endl praktischer bei größeren evtl. instabilen Programmen, da man durch den Flush ggf. noch Daten ausgespuckt bekommt, die ansonsten verschluckt worden wären. Dafür könnte bei sehr vielen Flushes natürlich die Geschwindigkeit leiden. Für den Anfang ist es aber sicher keine schlechtere Methode, das endl zu verwenden.

    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");
    }
    Das cin.clear() setzt lediglich den Fehlerstatus von cin zurück und ist hier eher optional, in der Regel schreibt man das in so einer Situation jedoch dazu.

    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.

  7. #6
    ButterZ ButterZ ist offline
    Avatar von ButterZ

    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

  8. #7
    Kelshan Kelshan ist offline
    Avatar von Kelshan

    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.

  9. #8
    ButterZ ButterZ ist offline
    Avatar von ButterZ

    AW: C++ Variablen nacheinander eingeben

    Zitat Kelshan Beitrag anzeigen
    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.
    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.

  10. #9
    Kelshan Kelshan ist offline
    Avatar von Kelshan

    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.

  11. #10
    xallex xallex ist offline
    Avatar von xallex

    AW: C++ Variablen nacheinander eingeben

    Hey,
    Erstmal danke für die vielen Antworten. Das Problem konnte mit dem genannten Befehl
    Code:
    cin.clear();
    cin.ignore(cin.rdbuf()->in_avail());
    behoben werden

  12. #11
    ButterZ ButterZ ist offline
    Avatar von ButterZ

    AW: C++ Variablen nacheinander eingeben

    Zitat xallex Beitrag anzeigen
    Hey,
    Erstmal danke für die vielen Antworten. Das Problem konnte mit dem genannten Befehl
    Code:
    cin.clear();
    cin.ignore(cin.rdbuf()->in_avail());
    behoben werden
    Sehr gut. Mir war auch klar das der kleine Test das Problem beheben würde,
    allerdings habe ich mit std::cin immer wieder Probleme die garnicht auftreten dürften.
    Deshalb war ich skeptisch ^^.

    Nunja aufjeden Fall ist es schön das es nun funzt.

Ähnliche Themen


  1. 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...

  2. 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...

  3. 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...

  4. 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,...

  5. 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...

Besucher kamen mit folgenden Begriffen auf die Seite

c 2 ints hintereinander