- Registriert
- 18.03.06
- Beiträge
- 280
Moin!
Wir werden in der Schule grade ein wenig an C++ herangeführt. Ich habe schonmal ein wenig PHP gemacht und deswegen weniger schwierigkeiten als der Rest der Klasse *puh*
Wir erstellen kleine Kommandozeilenprogis, mit Zinseszinsrechnung, also wirklich nur ganz einfach um an die Sprache herangeführt zu werden. ich weiß nun, das dies kein C++ Ferum ist, doch habe ich kein Interesse daran mich erst bei einem Anzumelden für eine Frage, die so einfach sein sollte, dass man sie mir auch hier beantworten kann.
Wir definieren Variablen als "double" und mein Progi funktioniert auch total Klasse (auch wenns sicherlich verbesserbar ist^^). Aber wenn man bei der Eingabe der Zahlen aus Versehen (oder mit Absicht) Buchstaben eingibt, fällt das Programm in eine von zwei (je nach Ort der Fehleingabe, die im Quellcode jeweils nächste) while Schleifen und wiederholt diese unendlich. Eine Unterbrechung ist nicht möglich, da die Bedingung der Schleife eine Variable ist, die Innerhalb der Schleife vom benutzer eingegeben werden soll. Aber alle "std::cin" werden ignoriert ab der Falscheingabe. Initalisiert man die Bedingungsvariable innerhalb der Schleife neu und setzt sie auf einen anderen Wert, so das die Bedingung TRUE sein muss, springt er im Code zur nächsten Schleife die diese eine Variable behandelt und dort das gleiche Spiel -> Endlosschleife
Ich habe nun den Debugger geöffnet, das Programm pausieren lassen und nachschauen wollen, was in dieser "Fehlerhaften" Variable gespeichert ist: Suprise, Surprise -> 0 (also wirklich 0 denn Hexdezimal 0x0). Eine völlig andere Variable ("i") wurde mit 0 initialisiert, hat aber komischerweise der wert 0xffffffffff (mein lehrer nannte es high value), obwohl nie aufgerufen. Und die Variable, in die der Falsche Datentyp eingegeben wurde enthält auch 0x0.
Woran liegt das?
Mein lösungsansatz wäre, alle std::cin Variablen erst als Strings zu initalisieren und diese den nach der eingabe zu kontrollieren ob alles Zahlen sind (Komma bzw. Punkt als Trennzeichen erlaubt). Wenn ja umwandeln in double, wenn nicht zur Wiederholung der Eingabe auffordern. Leider weiß ich nicht wie man variablen Zeichen für Zeichen auf einen Wertebereich kontrolliert und denn auch noch umwandelt. Das wäre meine zweite frage, wie man sowas macht. (In PHP würde ich wohl mir arrays und foreach und reg_ex oder so ran gehen, wenn die Variablenverwaltung dort nicht so easy wäre^^)
Danke für eure geschätze Aufmerksamkeit! :-D
Wir werden in der Schule grade ein wenig an C++ herangeführt. Ich habe schonmal ein wenig PHP gemacht und deswegen weniger schwierigkeiten als der Rest der Klasse *puh*
Wir erstellen kleine Kommandozeilenprogis, mit Zinseszinsrechnung, also wirklich nur ganz einfach um an die Sprache herangeführt zu werden. ich weiß nun, das dies kein C++ Ferum ist, doch habe ich kein Interesse daran mich erst bei einem Anzumelden für eine Frage, die so einfach sein sollte, dass man sie mir auch hier beantworten kann.
Wir definieren Variablen als "double" und mein Progi funktioniert auch total Klasse (auch wenns sicherlich verbesserbar ist^^). Aber wenn man bei der Eingabe der Zahlen aus Versehen (oder mit Absicht) Buchstaben eingibt, fällt das Programm in eine von zwei (je nach Ort der Fehleingabe, die im Quellcode jeweils nächste) while Schleifen und wiederholt diese unendlich. Eine Unterbrechung ist nicht möglich, da die Bedingung der Schleife eine Variable ist, die Innerhalb der Schleife vom benutzer eingegeben werden soll. Aber alle "std::cin" werden ignoriert ab der Falscheingabe. Initalisiert man die Bedingungsvariable innerhalb der Schleife neu und setzt sie auf einen anderen Wert, so das die Bedingung TRUE sein muss, springt er im Code zur nächsten Schleife die diese eine Variable behandelt und dort das gleiche Spiel -> Endlosschleife
Ich habe nun den Debugger geöffnet, das Programm pausieren lassen und nachschauen wollen, was in dieser "Fehlerhaften" Variable gespeichert ist: Suprise, Surprise -> 0 (also wirklich 0 denn Hexdezimal 0x0). Eine völlig andere Variable ("i") wurde mit 0 initialisiert, hat aber komischerweise der wert 0xffffffffff (mein lehrer nannte es high value), obwohl nie aufgerufen. Und die Variable, in die der Falsche Datentyp eingegeben wurde enthält auch 0x0.
Woran liegt das?
Mein lösungsansatz wäre, alle std::cin Variablen erst als Strings zu initalisieren und diese den nach der eingabe zu kontrollieren ob alles Zahlen sind (Komma bzw. Punkt als Trennzeichen erlaubt). Wenn ja umwandeln in double, wenn nicht zur Wiederholung der Eingabe auffordern. Leider weiß ich nicht wie man variablen Zeichen für Zeichen auf einen Wertebereich kontrolliert und denn auch noch umwandelt. Das wäre meine zweite frage, wie man sowas macht. (In PHP würde ich wohl mir arrays und foreach und reg_ex oder so ran gehen, wenn die Variablenverwaltung dort nicht so easy wäre^^)
Danke für eure geschätze Aufmerksamkeit! :-D