C++ Eingabe -> Verständnissproblem



  • Hallo,

    Ich habe ein Verständnissproblem bei der Eingabe über cin.

    Wenn ich zb. einen Namen einlesen möchte ( und in einer Variablen speichern ), geht das auch; aber sobald der Name ein Leerzeichen enthält, bekomme ich bei der Ausgabe nur den Teil bis zum Leerzeichen angezeigt... teilweise stürzt sogar das Programm ab...

    Auch bei Zahlen habe ich ein ähnliches Problem, ich wollte ein Programm mit Wurzeln schreiben und habe zum testen auch mal versucht Gleitkommazahlen zu verwenden ( zb. 2,5 ) jedoch wurde die Wurzel nur aus 2 berechnet ???

    Liegt das am cin Operator oder am Typ der Variable ( ich habe String & Float Variablen verwendet ) oder an etwas ganz anderem ???

    Ich bin noch ziehmlich am Anfang mit C++, deshalb auch meine wahrscheinlich dummen Fragen...

    Wäre echt nett, wenn mir das einer erklären könnte...:-)



  • aber sobald der Name ein Leerzeichen enthält, bekomme ich bei der Ausgabe nur den Teil bis zum Leerzeichen angezeigt...

    schau dir mal getline fuer strings und getline fuer input streams an

    ich wollte ein Programm mit Wurzeln schreiben und habe zum testen auch mal versucht Gleitkommazahlen zu verwenden ( zb. 2,5 ) jedoch wurde die Wurzel nur aus 2 berechnet ???

    Berechnest du die Wurzeln selber? Wenn ja, dann zeig doch mal den Code.



  • also um nen string mit leerzeichen einzulesen, würde ich

    getline(cin,StringName);
    

    verwenden, dann liest er die ganze zeile ein.. bei dem anderen problem weiß ich grad auch nichts...



  • Hi,

    schau dir mal getline an:
    http://www.cppreference.com/cppio/getline.html

    Bei der anderen Sache wirst du wohl irgendwo den falschen Datentypen benutzen, da die Nachkommastellen abgeschnitten werden. Wo genau kann man ohne Code natürlich nicht sagen.

    BTW: Verständis schreibt man mit einem s. Ich wäre dafür, das genauso wie Standart zu zensieren, da ich das immer häufiger lese.



  • Versuch mal 2.5 anstatt 2,5



  • CarstenJ schrieb:

    ...BTW: Verständis schreibt man mit einem s...

    falsch: verständnis 😃



  • Hallo,

    Erst mal vielen Dank für die zahlreichen und schnellen Antworten.

    Und natürlich Euer Verständnis...:-)

    Das mit getline werde ich mir heute Abend mal anschauen.

    Ich gehe also erst mal davon aus, dass cin nur einzelne Wörter einliesst und getline auch ganze Zeilen ?

    Was heisst Wurzel selbst berechnen ? Nein, natürlich nicht, das war eine Aufgabe aus einem Übungsbuch ( Beispiel war halt mit sqrt ).

    2.5 hatte ich glaube ich auch getetstet, bin mir allerdings nicht sicher und werde das selbstverständlich nachhohlen.

    Als Variablentyp hatte ich erst int, dann float und sogar double verwendet...

    Das Ergebniss war eigentlich auch immer korrekt.

    Nochmals vielen Dank und Bitte habt Verständnis für eventuelle Rechtschreibfehler...:-)



  • Schieni schrieb:

    Versuch mal 2.5 anstatt 2,5

    Problem mit den Zahlen beim Wurzelziehen lag tatsächlich am , statt . -> was mein nächtes Problem wäre : kann man einen eingelesenen Wert auf dieses Problem hin prüfen und vor der Weiterverarbeitung ändern indem man , durch . ersetzt ?

    DarkSea schrieb:

    also um nen string mit leerzeichen einzulesen, würde ich

    getline(cin,StringName);
    

    verwenden, dann liest er die ganze zeile ein.. bei dem anderen problem weiß ich grad auch nichts...

    Das mit getline klappt soweit auch; nur immer wenn ich das Programm ausführe und etwas eingebe muss ich danach 2 x Enter drücken damit es weitergeht... das ist ja irgendwie nicht so ganz richtig, oder ?

    Also erst mal vielen Dank für Eure bisherige & zukünftige Hilfe... ich fürchte ich
    werde wohl noch viele dumme Fragen stellen... 🙂



  • Whitedragon276 schrieb:

    Schieni schrieb:

    Versuch mal 2.5 anstatt 2,5

    Problem mit den Zahlen beim Wurzelziehen lag tatsächlich am , statt . -> was mein nächtes Problem wäre : kann man einen eingelesenen Wert auf dieses Problem hin prüfen und vor der Weiterverarbeitung ändern indem man , durch . ersetzt ?

    Die Zahl am besten als std::string einlesen, dann auf ',' durchsuchen und bei Vorhandensein durch '.' ersetzen. (Wie das geht mit ersetzen, suchen etc. siehe http://www.cppreference.com/cppstring/). Danach in einen Double oder Int umwandeln, je nachdem ob ganze oder reelle Zahl.

    DarkSea schrieb:

    also um nen string mit leerzeichen einzulesen, würde ich

    getline(cin,StringName);
    

    verwenden, dann liest er die ganze zeile ein.. bei dem anderen problem weiß ich grad auch nichts...

    Das mit getline klappt soweit auch; nur immer wenn ich das Programm ausführe und etwas eingebe muss ich danach 2 x Enter drücken damit es weitergeht... das ist ja irgendwie nicht so ganz richtig, oder ?

    Das kann ich nicht so richtig nachvollziehen, normal müsstest du nur einmal enter drücken. Am besten du postest mal den Quellcode bei dem das Problem auftritt.

    Caipi



  • #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main() 
    
    {
    
    	string name;
    
    	getline(cin,name);
    
    	cout << name;
    
    return 0;
    
    }
    

    Danke erst mal für den Tipp mit den CPP_Strings, werde mir das mal näher anschauen und hoffen, dass ich das mit meinen Englischkentnissen noch hinbekomme... 😃

    Falls es nicht am Quellcode liegen sollte : ich nutze Visual C++ 6.0 SP6 🙄



  • Das liegt glaube ich am getline()-Bug im Visual C++.

    Siehe dazu: http://support.microsoft.com/default.aspx?scid=kb;EN-US;q240015

    Caipi



  • Ist OK, funktioniert jetzt so wie es sollte.., Danke Caipi 😉

    Wie konnte ich auch glauben ein MS Produkt zu besitzen, das nach nur 6 SP´s schon Bugfrei ist...


Anmelden zum Antworten