Проверьте, вводит ли Пользователь Букву или Цифру в C

StackOverflow https://stackoverflow.com/questions/1478932

  •  16-09-2019
  •  | 
  •  

Вопрос

Есть ли простой способ вызвать скрипт на C, чтобы узнать, вводит ли пользователь букву из английского алфавита?Я думаю о чем-то вроде этого:

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

Я хочу проверить, чтобы пользователь вводил не букву, а вместо нее цифру.Интересно, есть ли простой способ извлечь каждую букву, не вводя вручную каждую букву алфавита :)

Это было полезно?

Решение

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

Другие советы

Лучше всего проверять сами десятичные цифры, а не буквы. isdigit.

#include <ctype.h>

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

isalpha() будет проверять один символ за раз.Если пользователь вводит число вроде 23A4, вам нужно проверить каждую букву.Вы можете использовать это:

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
}

Я согласен, что atoi() не является потокобезопасной и устаревшей функцией.Вместо этого вы можете написать другую простую функцию.

Помимо функции isalpha, вы можете сделать это следующим образом:

char vrbl;

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

Тот Самый strto*() здесь пригодятся библиотечные функции:

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

Вы также можете сделать это, выполнив несколько простых условий: проверить, является ли символ алфавитом или нет

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

Или вы также можете использовать значения ASCII.

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;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top