2009-09-25 9 views
5
eingibt

Gibt es eine einfache Möglichkeit, ein C-Skript aufzurufen, um festzustellen, ob der Benutzer einen Buchstaben aus dem englischen Alphabet eingibt? Ich denke, so etwas wie dieses:Prüfen, ob Benutzer einen Buchstaben oder eine Nummer in C

if (variable == a - z) {printf("You entered a letter! You must enter a number!");} else (//do something} 

Ich möchte der Benutzer machen um zu überprüfen, dass kein Brief eingeht, sondern tritt eine Reihe statt. jeden Brief zu ziehen, ohne manuell eingeben jeden Buchstaben des Alphabets :)

Antwort

9
#include <ctype.h> 
if (isalpha(variable)) { ... } 
+2

+1, aber bitte ändern Sie '$' in '#' ;-) –

+4

Beachten Sie, dass 'isdigit()' hier nützlicher ist. –

+0

Ehrfürchtig. Was wäre es, nach Nummer und Alpha zu suchen? –

13

Es ist am besten zu testen, für Dezimal Ziffern selbst anstelle von Buchstaben mich gefragt, ob es eine einfache Möglichkeit ist. isdigit.

#include <ctype.h> 

if(isdigit(variable)) 
{ 
    //valid input 
} 
else 
{ 
    //invalid input 
} 
1

Abgesehen von der isalpha Funktion, können Sie es wie folgt tun:

char vrbl; 

if ((vrbl >= 'a' && vrbl <= 'z') || (vrbl >= 'A' && vrbl <= 'Z')) 
{ 
    printf("You entered a letter! You must enter a number!"); 
} 
+1

Obwohl dies immer noch Buchstaben außerhalb des ASCII-Bereichs ignoriert werden kann ... – AlBlue

+0

Was haben Sie gegen Vokale? Wenn Sie die Bedeutung aus Ihren Variablennamen entfernen möchten, können Sie auch einfach 'v' verwenden. –

1

isalpha() wird zu einem Zeitpunkt, um ein Zeichen zu testen. Wenn der Benutzer eine Nummer wie 23A4 eingibt, möchten Sie jeden Buchstaben testen. Sie können dies verwenden:

bool isNumber(char *input) { 
    for (i = 0; input[i] != '\0'; i++) 
     if (isalpha(input[i])) 
      return false; 
    return true; 
} 

// accept and check 
scanf("%s", input); // where input is a pointer to a char with memory allocated 
if (isNumber(input)) { 
    number = atoi(input); 
    // rest of the code 
} 

Ich stimme zu, dass atoi() ist nicht Thread sicher und eine veraltete Funktion. Sie können stattdessen eine andere einfache Funktion schreiben.

0
int strOnlyNumbers(char *str) 
{ 
char current_character; 
/* While current_character isn't null */ 
while(current_character = *str) 
{ 
    if(
    (current_character < '0') 
    || 
    (current_character > '9') 
    ) 
    { 
    return 0; 
    } 
    else 
    { 
    ++str; 
    } 
} 
return 1; 
} 
0

Die strto*() Bibliotheksfunktionen kommen hier praktisch:

#include <stdio.h> 
#include <stdlib.h> 
#include <ctype.h> 
#define SIZE ... 

int main(void) 
{ 
    char buffer[SIZE]; 
    printf("Gimme an integer value: "); 
    fflush(stdout); 
    if (fgets(buffer, sizeof buffer, stdin)) 
    { 
    long value; 
    char *check; 
    /** 
    * strtol() scans the string and converts it to the equivalent 
    * integer value. check will point to the first character 
    * in the buffer that isn't part of a valid integer constant; 
    * e.g., if you type in "12W", check will point to 'W'. 
    * 
    * If check points to something other than whitespace or a 0 
    * terminator, then the input string is not a valid integer. 
    */ 
    value = strtol(buffer, &check, 0); 
    if (!isspace(*check) && *check != 0) 
    { 
     printf("%s is not a valid integer\n", buffer); 
    } 
    } 
    return 0; 
} 
0

Sie auch check whether a character is alphabet or not

if((ch>='a' && ch<='z') || (ch>='A' && ch<='Z')) 
{ 
    printf("Alphabet"); 
} 

, um es mit einigen einfachen Bedingungen tun können, Sie können aber auch ASCII

Werte verwenden
if((ch>=97 && ch<=122) || (ch>=65 && ch<=90)) 
{ 
    printf("Alphabet"); 
} 
Verwandte Themen