Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Wie Eingabe von Buchstaben verbieten?

Empfohlene Antworten

Veröffentlicht

Hi

Ich versuche mich hier grade nochmal an nem Taschenrechner unter C++ und bin dabei auf das Problem gestossen, dass falls der Benutzer statt ner Zahl einen Buchstaben eingibt, der Computer den als eine Zahl interpretiert.

Wie kann ich dies unterbinden?

Also einfach so, dass wenn man einen oder mehrere Buchstaben eingibt, der Computer eine Fehlermeldung ausgibt.

:confused:

MfG Crash2001 :)

Wie wird die Eingabe realisiert ?

Über ein Objekt ? scanf ?

Schreib das mal bitte - und ich sag Dir die lösung :)

naja man könnte zum beispiel das ganze mit den funktionen _kbhit und _getch erledigen.

mit der funktion _kbhit kann man abfragen, ob eine taste gedrück wurde. die funktion _getch liefert das zeichen als int- wert. dieses kann man dann weiterverarbeiten. zum beispiel mit put an die standardausgabe geben.

das problem ist aber, das das ganze meiner meinung nach ms spezifisch ist.

atol is z.B. ANSI :) Schau mal da nach...

ich empfehle auch "is digit"

if(isdigit(eingelesenes_zeichen))

{

//Zahl

}

else

{

printf("Du DAU");

.......;

.......;

}

so oder so ähnlich sollte es aussehen.

fehler sind auf inkompetenz gepaart mit müdigkeit zurückzuführen :D:D

zeus

  • Autor

Hi

@Knuddelbaer

Also das wird über scanf bzw cin eingelesen. Ich möchte das dann halt so realisieren, dass nach der Eingabe geprüft wird, ob es sich bei den eingegebenen Sachen nur um Zahlen handelt, und falls nicht alles andere als ungültige Eingabe erkennen lassen und somit eine Nachicht ausgeben lassen.

@maddin

Geht das mit den zwei Funktionen? Und wenn, wie?

@EisenUli

Kann man das auch auf float ausweiten?Also ich denke mal, dass mit isdigit abgefragt wird, ob das eine Zahl ist, oder? Bei den anderen weiss ich jetzt nicht, was die prüfen. Kannst du das bitte nochmal posten?

Und was macht atof()?

@der_zeus

Muss man da dann denn explizit jedeas ander Zeichen eingeben, das nicht erlaubt sein soll, oder ist das schon so automatisch?

Ich werde mir jetzt mal die Sachen anschauen und gucken, ob ich das damit hinkriege. Für weiter Hilfe wäre ich natürlich trotzdem dankbar.

MfG Crash2001 :)

bei cin kannst Du mit Flags abfragen ob die Eingabe geklappt hat. (Sorry das Buch grad net da - schau mal in der hilfe nach cin oder in einer Suchmaschiene.

cin.bad() oder so war das).

Eine entscheidende Frage wäre übrigens ob Du im ANSI bleiben willst (portabel) oder Dich auf einen bestimmten Compiler einschränken möchtest (da gibt es sicherlich Funktionen die das übernehmen).

Wenn Dir atol atof nicht helfen und das abfragen der Flags von cin nicht genügen - wirst Du das eingegebene selbst prüfen müssen, in einer Schleife.

Good luck!

also ich kann ja mal versuchen, ob ich nocheinmal ein beispiel zusammenbekomme.


int main ()

{

   double zahl;

   int tmp;

   do {

      while (!_kbhit());

       tmp = _getch();

      if (tmp == '0' && tmp == '1' ... && tmp == '9' && tmp == '.')

         _putch(tmp);

      if (tmp == 224)

         _getch();

   } while (tmp != 13); 

   cin >> zahl;

}

in der bedingung der äußeren do while schleife bin ich mir nicht ganz sicher, ob es das richtige zeichen ist. es sollte dem entsprechen, was die tastatur beim drücken auf die enter taste sendet.

in der schleife wird solange gewartet, bis eine taste gedrückt wurde. die funktion also einen wert ungleich 0 liefert. ist das der fall, wird das zeichen mittels _getrch() gelesen. diese wird mit den zahlen 0 - 9 und dem punkt verglichen. ist das der fall, wird das zeichen an die console gegeben und angezeigt.

die zweite abfrage regelt den fall, das das gelesene zeichen gleich 224 ist. in diesem fall wurde eine funktionstaste mitgedrückt. zum beispiel STRG + S. dann wird ein zweites zeichen gesendet, das noch gelesen werden muss.

das ganze geht soweit, bis das eingegeben zeichen gleich 13 ist. ob diese zahl wirklich richtig ist weiß ich wie gesagt leider nicht genau. aber man sollte das mit ein wenig ausprobieren herausbekommen.

ist das auf jeden fall geschehen, werden alle zeichen gelesen.

Das is aber auch keine portable lösung - und compilerabhängig.

Der Umstand der eingabe würde helfen man ein konkretes Beispiel zu geben.

<BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Knuddlbaer:

<STRONG>Das is aber auch keine portable lösung - und compilerabhängig.

.</STRONG>

stimmt es waren die jungs von ms die sich diese funktionen haben einfallen lassen.

es ist mir auch klar, das es nicht dem standard entspricht. allerdings hat es einige vorteile. zum beispiel werden alle nicht gewünschten zeichen auch garnicht angezeigt. für alle anderen methoden, zumindest die mir bekannt sind, muß man vorher die zeichen einlesen, um sie danach zu prüfen oder zu casten.

<BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von maddin:

<STRONG>stimmt es waren die jungs von ms die sich diese funktionen haben einfallen lassen.

</STRONG>

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.