|
Nvidia Freak
|
| Titel: C++: Buchstabeneingabe bei Taschenrechner verhindern |
19.02.2011 16:16 |
|
|
Anmeldungsdatum: 02.05.2010
Beiträge: 399
|
Hi, Ich habe mir in C++ einen simplen Taschenrechner geschrieben, der auch solange man Zahlen eingibt, ganz normal funktioniert. Gibt man bei der Rechnung jetzt jedoch einen Buchstaben ein, beginnt eine Endlosschleife. Kann mir da jemand helfen?
PS.: Hier der Code
________________________________________ Rechtschreibfehler vehrleihen Beiträägen eine persönliche Nothe Recycling Tower
|
 |
|
| |
|
-luke-
|
| Titel: C++: Buchstabeneingabe bei Taschenrechner verhindern |
19.02.2011 19:08 |
|
|
Anmeldungsdatum: 17.05.2010
Beiträge: 379
|
Hey. Ich weiß zwar nich womit du arbeitest, aber : Nutze das TextChanged-Ereignis, lese das jeweils letzte Zeichen der Textbox aus, prüfe den ASCII-Code, wenn er nich im Bereich der Zahlen liegt, kill das letzte Zeichen. So haben wir das mit Visual Studio gemacht :-) Gibt natürlich noch mehr Wege. LG
|
 |
|
| |
|
xero
|
| Titel: C++: Buchstabeneingabe bei Taschenrechner verhindern |
19.02.2011 19:46 |
|
|
Anmeldungsdatum: 04.09.2006
Beiträge: 450
 |
Tutorial Autor (?) |
|
Da ist der Fehler:
Zitat: while (chAuswahl !='b' && chAuswahl !='B') chAuswahl kann nie 'b' und gleichzeitig 'B' sein; das ist aber deine Bedingung für das Beenden der Schleife. Richtig muss es heißen:
Zitat: Pseudocode: Solange Auswahl nicht 'b' oder 'B' also:
Zitat: while (chAuswahl !='b' || chAuswahl !='B')
mfg
|
 |
|
| |
|
L3oop
|
| Titel: C++: Buchstabeneingabe bei Taschenrechner verhindern |
19.02.2011 20:57 |
|
Moderator 45.021 Punkte (?)
Anmeldungsdatum: 25.04.2008
Beiträge: 9.399
 |
Experte |
|
xero hat folgendes geschrieben: chAuswahl kann nie 'b' und gleichzeitig 'B' sein
Muss es das denn? Es reicht doch schon, wenn eine der Bedingungen falsch ist (UND), damit die Schleife abgebrochen wird?!
Wenn man es so machen würde, wie du vorgeschlagen hast:
while (chAuswahl !='b' || chAuswahl !='B')
Beim ODER muss mindestens eine Aussage wahr sein, damit die Prüfung wahr ist. Somit müssten, um die Schleife abzubrechen, beide Aussagen widerlegt werden (chAuswahl == 'b' && chAuswahl == 'B'), was, wie du schon gesagt hast, nie eintreten wird.
Der Fehler muss imho irgendwo anders liegen, leider weiß ich jedoch nicht, wie man eine Zahl in C++ auf Gültigkeit prüft.
________________________________________ Stereomix • Bootreihenfolge ändern • PC beschleunigen
|
 |
|
| |
|
xero
|
| Titel: C++: Buchstabeneingabe bei Taschenrechner verhindern |
19.02.2011 22:32 |
|
|
Anmeldungsdatum: 04.09.2006
Beiträge: 450
 |
Tutorial Autor (?) |
|
Entschuldigung. Du hast natürlich absolut Recht. Hab mich durch die doppelte Negation genau vertan.
Habs mir nochmal im Detail angesehen; allerdings bin ich in Cpp nicht sehr bewandert.
Jedenfalls: Das Problem ist, dass eine beliebige Eingabe direkt in einen float eingelesen wird. Das führt wohl dazu, dass es im Buffer einen Fehler gibt den man erst wieder explizit löschen müsste.
Jedenfalls solltest du die Eingabe anders machen. Schau dir dazu atoi an: http://www.cplusplus.com/reference/clibr...dlib/atoi/ bzw. das Gegenstück für Float: atof
Es gibt sicher noch elegantere Lösungen zum Einlesen(Stichwort getline etc.), die sich auch sicher über google schnell finden lassen. ^^
mfg
|
 |
|
| |
|
Nvidia Freak
|
| Titel: C++: Buchstabeneingabe bei Taschenrechner verhindern |
20.03.2011 10:46 |
|
|
Anmeldungsdatum: 02.05.2010
Beiträge: 399
|
@xero Ich habe mir deinen Vorschlag mal angeguckt, aber iwie werde ich aus dem Beispiel dort nicht schlau. Ist das überhaupt c++?
________________________________________ Rechtschreibfehler vehrleihen Beiträägen eine persönliche Nothe Recycling Tower
|
 |
|
| |
|
|
|
|