Check if User Inputs a Letter or Number in C

后端 未结 7 1432
终归单人心
终归单人心 2020-12-03 15:22

Is there an easy way to call a C script to see if the user inputs a letter from the English alphabet? I\'m thinking something like this:

if (variable == a -          


        
相关标签:
7条回答
  • 2020-12-03 16:00

    You can also do it with few simple conditions to check whether a character is alphabet or not

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

    Or you can also use ASCII values

    if((ch>=97 && ch<=122) || (ch>=65 && ch<=90))
    {
        printf("Alphabet");
    }
    
    0 讨论(0)
  • 2020-12-03 16:05

    It's best to test for decimal numeric digits themselves instead of letters. isdigit.

    #include <ctype.h>
    
    if(isdigit(variable))
    {
      //valid input
    }
    else
    {
      //invalid input
    }
    
    0 讨论(0)
  • 2020-12-03 16:07
    #include <ctype.h>
    if (isalpha(variable)) { ... }
    
    0 讨论(0)
  • 2020-12-03 16:08

    isalpha() will test one character at a time. If the user input a number like 23A4, then you want to test every letter. You can use this:

    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
    }
    

    I agree that atoi() is not thread safe and a deprecated function. You can write another simple function in place of that.

    0 讨论(0)
  • 2020-12-03 16:15
    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 讨论(0)
  • 2020-12-03 16:16

    The strto*() library functions come in handy here:

    #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 讨论(0)
提交回复
热议问题