Frage

Gibt es eine einfache Möglichkeit, ein C-Skript aufrufen, um zu sehen, ob der Benutzer einen Buchstaben aus dem Alphabet Englisch eingibt? Ich denke, so etwas wie folgt aus:

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

Ich möchte sicher, muss der Benutzer, um zu überprüfen, nicht einen Buchstaben einzugeben, sondern tritt in eine Reihe statt. Sie fragen sich, ob es eine einfache Möglichkeit, jeden Brief zu ziehen, ohne manuell eingeben jeden Buchstaben des Alphabets:)

War es hilfreich?

Lösung

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

Andere Tipps

Es ist am besten für Dezimal-Ziffern zu testen, sich anstelle von Buchstaben. isdigit .

#include <ctype.h>

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

isalpha () wird zu einem Zeitpunkt, um ein Zeichen zu testen. Wenn die Benutzereingabe eine Zahl wie 23a4, dann möchten Sie jeden Brief testen. Sie können diese 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 bin einverstanden, dass atoi () ist nicht Thread sicher und eine veraltete Funktion. Sie können eine andere einfache Funktion anstelle desjenigen schreiben.

Neben 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!");
}

Die strto*() Bibliotheksfunktionen kommen in praktisch hier:

#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;
}

Sie können es auch mit einigen einfachen Bedingungen überprüfen, ob ein Zeichen Alphabet oder nicht

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

Sie können aber auch ASCII-Werte verwenden

if((ch>=97 && ch<=122) || (ch>=65 && ch<=90))
{
    printf("Alphabet");
}
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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top