Zum Inhalt springen

Wie Eingabe von Buchstaben verbieten?


Empfohlene Beiträge

Geschrieben

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 :)

Geschrieben

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.

Geschrieben

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

Geschrieben

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 :)

Geschrieben

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!

Geschrieben

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.

Geschrieben

<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>

Geschrieben

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.

Geschrieben

<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>

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...