Nur Buchstaben, keine Zahlen.
-
Hallo
Hätte eine Frage und zwar gibt es eine Anweisung, die kontrolliert, ob die Eingabe eine Zahl oder ein Buchstabe ist?
Würde im Programmcode folgendes gerne einbauen:
... while(!scanf("%s",&var) || !"Buchstabe") { printf("FEHLER - Bitte geben Sie einen Wortstring ein!!!") } ...
Mit freundlichen Grüssen
Manuel Schwarz
-
Ja, in der <ctype.h> hast du einige Funktionen, mit denen du Zeichen klassifizieren kannst, unter anderem man: isalpha (prüft, ob du einen Buchstaben hast).
Wenn du das für ein komplettes Wort benötigst, mußt du natürlich jedes Zeichen in einer Schleife abfragen.
-
Danke für die Hilfe, funktioniert irgendwie trotzdem nicht.
while(!scanf("%s",&strinput) || isdigit(strinput)) { printf("FEHLER\n"); }
Wenn ich obiges im Code einbinde und im Programm dann eine Zahl eingebe, wir ein Stackdumpfile erstellt, worin folgendes steht:
Exception: STATUS_ACCESS_VIOLATION at eip=00401387 eax=6132BC90 ebx=00000000 ecx=00000000 edx=611000D4 esi=610FF1A0 edi=00401750 ebp=0022CC98 esp=0022CBC0 program=C:\Documents and Settings\Administrator.BBV\ascii_new.exe, pid 3620, thread main cs=001B ds=0023 es=0023 fs=003B gs=0000 ss=0023 Stack trace: Frame Function Args 0022CC98 00401387 (00000001, 00660198, 00660090, 61164990) 0022CD98 61006168 (00000000, 0022CDD0, 610054E0, 0022CDD0) 610054E0 61004416 (0000009C, A02404C7, E8610FF1, FFFFFF48) 2253795 [main] ascii_new 3620 _cygtls::handle_exceptions: Exception: STATUS_ACCESS_VIOLATION 2374383 [main] ascii_new 3620 _cygtls::handle_exceptions: Error while dumping state (probably corrupted stack)
Was soll das bedeuten?
-
Ich zitiere mich mal selber:
CStoll schrieb:
Wenn du das für ein komplettes Wort benötigst, mußt du natürlich jedes Zeichen in einer Schleife abfragen.
Natürlich könntest du das auch in eine Funktion auslagern:
int str_is(char* str,int(*class)(int)) { while(*str!='\0') if(!class(*str++)) return false; return true; } ... while(!scanf("%s",&strinput) || !str_is(strinput,isalpha)) printf("FEHLER!\n");
(achtung: ungetestet)