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)


Anmelden zum Antworten