Eingabe nur Zahlen akzeptieren
-
scanf liest nur die Zeichen ein, die auch zu dem aktuellen Formatspecifier passen.
Da '\n' die Eingabe abschließt, wird solange ein Zeichen eingelesen, bis die Eingabe(zeile) beendet wurde.
Das EOF wird noch zur Sicherheit abgefragt.
-
Wie kann ich das Zeichen direkt nach dem SCANF dem ("%d") einlesen?
-
Ach komm.
Wie machst du es denn in ignore_rest_of_line ?Es gibt auch eine Funktion, der du den Stream nicht übergeben musst und direkt von stdin liest.
Schau mal, da wirst du sicher eine finden: http://www.cplusplus.com/reference/clibrary/cstdio/
-
EingabeA: // printf("\nGeben Sie bitte a ein"); // if(1==scanf("\n%i",&a)) // { printf("\n%d",a); do { a=getchar(); putchar (a); } while (a != '\n'); printf("FEHLER: ES IST KEIEN ZAHL"); }
Das mit getChar putChar haben wir in der FH gar nicht behandelt - deshalb blick ich da gerade gar nicht durch, was die dort machen. Ich hab da oben im Code was mit getchar und putchar eingefügt. Naja zumindest gibt es jetzt 44F aus wenn man 44F eingibt, und nicht nur 44 wie zuvor, aber wie ich das nutzen kann, weiß ich auch nicht. Bin am verweifeln^^
-
Lass mal Zeile 8 weg. Nein besser noch: Lass Zeile 8 weg und erklär mal, warum die da war.
c.rackwitz schrieb:
Wenn du selber Code schreibst, musst du ihn auch verstehen. Code ist kein Haufen von wahllos zusammengeschmissenen Buchstaben und Zeichen, Code ist Logik pur. Du musst genau wissen, warum du wo und welches Zeichen setzt.
Das gilt erst recht für ganze Funktionsaufrufe.
-
Dann lies dir doch mal durch was die Funktionen machen: getchar und putchar
Eigentlich sind die Funktionsnamen schon sehr sprechend.Also nochmal:
Nach scanf ein Zeichen einlesen. Wenn das Zeichen gleich '\n' ist, ist alles in Ordnung.
Sonst ist es ein Fehler und du musst noch den Rest der Zeile einlesen.
-
Naja, das hab ich auch gemacht. Wenn ich Zeile 8 weg mache.
Kommt bei 44F eingabe nur 44 heraus.
Mit der Zeile 8 kommt 44F heraus. Ich denke mal, dass durch PUTchar das F mitgegeben wird, und dieser dann in der PRINTF erscheint.
-
Fast. Nur hat printf damit gar nichts zu tun.
Mach malprintf("\n<%d>\n",a);
Wo kommt das F denn jetzt?
putchar ist eine eigenständige Ausgabe (für ein Zeichen).
printf benutzt auch nur putchar (oder fputc) zur Ausgabe.
Jetzt noch mal eine Frage: Soll das F in deinem Programm überhaupt ausgegeben werden?
-
Nein Nein. Wie ich von Anfang an sagte.
Es sollen nur Ganzzahlige Zahlen akzeptiert werden.
Einträge wie 1234F oder F12345 oder 123F1234 sollen nicht akzeptiert werden.
Darum gings halt.
-
Dann lies eine ganze Zeile in ein char - Array ein, und prüfe den Inhalt auf Ziffern.
-
Belli schrieb:
Dann lies eine ganze Zeile in ein char - Array ein, und prüfe den Inhalt auf Ziffern.
Diesen Vorschlag hatte ich bereits auf Seite 1 gegeben. Erstaunlich, dass er offenbar ignoriert wurde und 3 weitere Seiten folgten.
-
berniebutt schrieb:
Belli schrieb:
Dann lies eine ganze Zeile in ein char - Array ein, und prüfe den Inhalt auf Ziffern.
Diesen Vorschlag hatte ich bereits auf Seite 1 gegeben. Erstaunlich, dass er offenbar ignoriert wurde und 3 weitere Seiten folgten.
Ich weiß nicht, wie ich das mache.
-
Gut, war auf Seite 2:
DirkB schrieb:
Lies die Eingabe mit fgets() ein und werte sie mit strtol() aus.
Wenn der endptr nicht auf '\n' zeigt, hast du einen Fehler.
-
if((1==scanf("\n%i",&b)) || (getchar()==10))
Die Lösung hier habe ich mir gerade zusammengereimt, und funktioniert irgendwie.
So richtig gefallen tut mir die Lösung zwar nicht aber sie geht (bis jetzt jedenfalls)Das
(1==scanf("\n%i",&b)
akzeptiert alle Eingaben die mit einer Zahl beginnen.
Wieso auch immer nimmt er dort nur die Zahl heraus, die restlichen glieder
greift dann (warum auch immer^^) das getchar auf, und wenn dieser gleich 10 ist (das war bei mir der Fall wenn der User NUR Zahlen eingegeben hat) ist alles korrekt.
So zumindest konnte ich jetzt Eingaben durchlassen die wirklich nur Zahlen beinhalten. Sprich bei Eingaben wie TEST123TEST und 123TEST werden nicht zugelassen, sondern nur pure Zahleneinträge wie 123.Hier im Forum bei den Antworten meinte jemand, dass bei Eingabe einer Zahl ohne weitere Sonderzeichen und Buchstaben man am Ende ein '\n' abfangen kann. Jedoch spuckt der bei mir statt eines '\n' eine 10 aus. Wieso ist das so? (Das habe ich nicht verstanden, warum da jetzt 10 herauskommt bei Eingabe von NUR ZAHLEN)
Ist der Code oben OK so, oder könnte ich das anders machen?
-
http://www.c-plusplus.net/forum/p2184737#2184737
demonstriert, wie man mit scanf float-Werte bei der Eingabe prüft ohne Überlauf/Unterlaufprüfung.
-
BunterVogel schrieb:
Hier im Forum bei den Antworten meinte jemand, dass bei Eingabe einer Zahl ohne weitere Sonderzeichen und Buchstaben man am Ende ein '\n' abfangen kann. Jedoch spuckt der bei mir statt eines '\n' eine 10 aus. Wieso ist das so? (Das habe ich nicht verstanden, warum da jetzt 10 herauskommt bei Eingabe von NUR ZAHLEN)
Schreib doch statt der 10 einfach mal '\n' und probier es aus.
Oder mach mal spasseshalberprintf("Der Code von \\n ist %d\n", '\n');
Dann machst du dich noch über ASCII schlau, z.B. in der Wikipedia: http://de.wikipedia.org/wiki/Ascii
Dies "warum auch immer" habe ich aber schon erklärt.