Neuling, Hilfe bei Eingabefehler
-
Moin, nettes Forum habt ihr hier.
Ich brauche eure Hilfe für einen Eingabefehler der beispielsweise nicht im Bereich 0-30 liegt und gleichzeitig beispielsweise von A-H.
Kann es selber nur wenn nur Zahlen und keine Buchstaben erlaubt sind.
mit while - schleife strtod etc.
Jemand gute tipps?
vielen dank
-
vllt etwas unverständlich ausgedrückt, es sind nur bereiche von 0-10 und von A..J erlaubt alle andern nicht, bei 11 oder K sollte fehlermeldung kommen
-
Wenn du nur einzelne Ziffern (0..9) oder Buchstaben haben willst, kannst du den entsprechenden Wertebereich per if() ausschließen:
char c; scanf("%c,"&c); if(!(c>='0'&&c<='9')&&!(c>='A'&&c<='J')) printf("Falsche Eingabe"); else //weiterarbeiten
(mit der Auswahl "mehrstellige Zahl oder Einzelbuchstabe" wird es etwas komplizierter)
-
er sagt mir in der zeile wo scanf ist, dass das & ungültig ist weil der linke operand vom typ const char[4] ist
-
Sorry, mein Fehler, hab das Komma vertauscht: scanf("%c",&c) <- so sollte es stimmen.
(aber solche Flüchtigkeitsfehler sollte selbst ein Anfänger umschiffen können :))
-
Hatte es nur kopiert, ist mir auch nicht aufgefallen.
Nunja danke dir, hat mich noch nicht bis zum ende meines problems gebracht, aber doch nen bissl
-
Was ist den noch übrig von deinem Problem?
-
so wie es gepostet wurde, hört er nach einmal auf, ich muss also die passende do-while schleife nehmen
jemand nen code dafür die zu dem passt, was der freundliche heer vorher gepostet hat?
-
Ja, sicher:
int ok=false;//eigentlich bool, aber das kennt C noch nicht char c; while(!ok) { scanf("%c",&c); if(/*Zeichen OK*/) ok=true; }
(für /*Zeichen OK*/ mußt du die Bedingung von oben umkehren - am einfachsten mit einem großen !(...) drumherum)
Der Code liest jetzt so lange ein, bis das eingelesene Zeichen durch deine Überprüfung gekommen ist.
-
Cherry schrieb:
so wie es gepostet wurde, hört er nach einmal auf, ich muss also die passende do-while schleife nehmen
jemand nen code dafür die zu dem passt, was der freundliche heer vorher gepostet hat?Da ich ebenfalls so nett bin wie Herr CStoll, hier die do - while - Variante.
#include <stdio.h> int main() { int c; //int, da mit getchar() eingelesen wird printf("Programm mit einem '.' beenden.\n"); do { c = getchar(); if(!(c >= '0' && c <= '9') && !(c >= 'A' && c <= 'J')) // dann gehe zur nächsten if-Abfrage { if(c == '.') //der Punkt beendet das Programm { printf("Programm wird beendet\n"); break; } else //ansonsten falsche Eingaben { printf("Falsche Eingabe: %c\n", c); } } else //ansonsten richtige Eingabe { printf("Richtige Eingabe: %c\n", c); } } while((c = getchar()) != '.'); // erklärt sich selbst return 0; }
Funktioniert aber, wie CStoll schon schrieb, nur mit einzelnen Zeichen.
An der anderen Version arbeite ich. Ich hoffe du auch.azoikum
-
@azoikum: Da sollte eigentlich ein getchar() pro Schleifendurchlauf ausreichen - bei deiner Schleife wird nur jeder zweite Tastendruck ausgewertet.
-
@CStoll
Erst einmal danke für deinen Hinweis.
Habe das ganze jetzt umprogrammiert.
Schon interessant, was man aus so einer "Neulingsfrage" machen kann.
Zähle mich aber selbst noch dazu.Jedenfalls funktioniert jetzt bei Eingabe > 9, z.B. 12, die Ausgabe korrekt.
Siehe isdigit(c).
Allerdings ist die Ausgabe bei 'AAA' immer noch 'A'.
Somit wird es als richtig ausgegeben.
Aber das bekomme ich noch hin.
Ist jetzt nur schon määächtig spät.#include <stdio.h> int main() { int i; char c; char buffer[32]; printf("Eingabeueberpruefung: A B C D E F G H I J\n"); printf(" 0 1 2 3 4 5 6 7 8 9\n"); printf("Programm mit einem '.' beenden.\n"); do { fgets(buffer, 32, stdin); //liest bis Zeilentrenner ein, oder hier maximal 32 sscanf(buffer, "%c", &c); //formatiert Inhalt von buffer nach c if(isdigit(c) == 0) //mit Hilfe von isdigit ermitteln, ob Buchstabe oder Zahl { printf("Eingabe war ein Buchstabe\n"); if(!(c >= 'A' && c <= 'J')) // dann gehe zur nächsten if-Abfrage { if(c == '.') //der Punkt beendet das Programm { printf("Programm wird beendet\n"); break; } else //ansonsten falsche Eingaben { printf("Falsche Eingabe: %c\n", c); } } else //ansonsten richtige Eingabe { printf("Richtige Eingabe: %c\n", c); } } else { printf("Eingabe war eine Zahl\n"); sscanf(buffer, "%d", &i); //formatiert Inhalt von buffer nach i if(!(i >= 0 && i <= 9)) //jetzt wird auch bei Zahlen >9 die falsche Eingabe erkannt { if(c == '.') //der Punkt beendet das Programm { printf("Programm wird beendet\n"); break; } else //ansonsten falsche Eingaben { printf("Falsche Eingabe: %d\n", i); } } else //ansonsten richtige Eingabe { printf("Richtige Eingabe: %d\n", i); } } } while(c != '.'); // erklärt sich selbst return 0; }
azoikum