HomeArtikelDownloadsForum
PCFreunde.deForumEntwicklungC++, C
Besucher online: 589
Schnellsuche

Anzeigen

Community

Foren
C++, C Seite 1/1
C++: Buchstabeneingabe bei Taschenrechner verhindern
AntwortenNeues ThemaZur Themenliste
Seiten:
1
Nachricht
Nvidia Freak
Titel: C++: Buchstabeneingabe bei Taschenrechner verhindern 19.02.2011 16:16
888 Punkte (?)
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
Private Nachricht senden  
 
-luke-
Titel: C++: Buchstabeneingabe bei Taschenrechner verhindern 19.02.2011 19:08
1.124 Punkte (?)
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
Private Nachricht senden  
 
xero
Titel: C++: Buchstabeneingabe bei Taschenrechner verhindern 19.02.2011 19:46
1.953 Punkte (?)
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
Private Nachricht senden  
 
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.

________________________________________
StereomixBootreihenfolge ändernPC beschleunigen
Private Nachricht senden  
 
xero
Titel: C++: Buchstabeneingabe bei Taschenrechner verhindern 19.02.2011 22:32
1.953 Punkte (?)
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
Private Nachricht senden  
 
Nvidia Freak
Titel: C++: Buchstabeneingabe bei Taschenrechner verhindern 20.03.2011 10:46
888 Punkte (?)
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
Private Nachricht senden  
 
AntwortenNeues ThemaZur Themenliste
Seiten:
1
Community Login
eMail:
Passwort:
Auto-Login