Abschneiden eingelesene Zahl



  • markuswenczel schrieb:

    wxSkip schrieb:

    Nich etwas, sondern alles.

    Wie ein Destruktor oder?

    std::cin.ignore(1);

    was macht diese Zeile bitte?

    Nein, nicht wie ein Destruktor, du kannst danach immer noch Sachen in die map schreiben. Lediglich der Inhalt der Map wird gelöscht, nicht das ganze Objekt.

    std::cin.ignore(1) wird vermutlich 1 Zeichen bei std::cin überspringen - du kannst aber auch einfach mal unter http://www.cplusplus.com/reference reinschauen.



  • Deine Fragen wurden ja grösstenteils schon beantwortet.
    Wie bereits von mir erwähnt war das eine quick-and-dirty Lösung, einfach auf die schnelle hingetippt.

    Daher halte dich an Sachen wie z.b. cin.ignore(1) nicht auf. Wenn du eine Zahl eingegeben hast schliesst du diese vermutlich mit einem return (enter) ab, und dieses newline verbleibt im stream.
    Um die Konsole im debug-Modus offen zu halten verwenden viele ein einfaches cin.get(), das einfach ein beliebiges Zeichen extrahiert. Da aber das newline noch im stream ist, würde dieses nun die Konsole nicht offen bleiben weil es sofort durch cin.get() extrahiert werden würde. Daher ignoriere ich einfach ein Zeichen und warte dann auf eine Eingabe.
    Aber all das ist eigentlich eher unwichtig für dein Problem.

    Wie bereits von wxskip erklärt handelt es sich bei oss um ein ostringstream-Objekt. Wie das genau intern funktioniert muss dich erstmal nicht interessieren.
    Durch den operator<< kannst du nun Zahlen, strings etc. reinpacken und diese werden "in einen string umgewandelt". Diesen string kannst du dann abrufen mit der member-Funktion str().
    Also hast du nachher eine string-Repräsentation deiner eingegebenen Zahl. (es gibgt natürlich andere Lösungsansätze, aber dieser erschien mir am einfachsten)

    Nun geh ich Zeichen für Zeichen durch diesen string und verwende die entsprechenden chars als key für den Zugriff auf die map, in der die entsprechnenden Zifferntexte stehen.

    Das clear() auf der map ist eigentlich unnötig, genauso wie der Aufruf der init()-Funktion (man könnte die static map direktk über eine static-Funktion initialisieren). Aber ich denke so ist es einfacher für dich zu verstehen was wie wo wann passiert.



  • @inter2k3: Ich glaube kaum, dass die Newline im Puffer bleibt. Wenn du zwei Strings einliest, enthält ja auch keiner von beiden ein Newline-Zeichen.



  • Muss noch sehr viel lernen, habe ich jetzt verstanden.
    lg
    markus



  • wxSkip schrieb:

    @inter2k3: Ich glaube kaum, dass die Newline im Puffer bleibt. Wenn du zwei Strings einliest, enthält ja auch keiner von beiden ein Newline-Zeichen.

    Das kommt ganz darauf an, womit du die Strings einliest. getline() schluckt das \n am Ende der Eingabe und wirft es weg, op>> überliest Whitespaces, bis es etwas verwendbares findet.


Anmelden zum Antworten