检查用户是否以C语言输入字母或数字

zengzsys  于 2022-12-02  发布在  其他
关注(0)|答案(8)|浏览(180)

有没有一种简单的方法可以调用一个C脚本来查看用户是否输入了英语字母表中的一个字母?

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

我想检查一下,确保用户没有输入字母,而是输入数字。想知道是否有一种简单的方法可以拉出每一个字母,而不需要手动键入字母表中的每一个字母:)

chy5wohz

chy5wohz1#

最好测试十进制数字本身,而不是字母。isdigit

#include <ctype.h>

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

afdcj2ne2#

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

8wtpewkr3#

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()不是线程安全的,是一个过时的函数。你可以写另一个简单的函数来代替它。

mdfafbf1

mdfafbf14#

除了isalpha函数之外,您还可以这样做:

char vrbl;

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

ef1yzkbh5#

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

nue99wik6#

你也可以用几个简单的条件来实现check whether a character is alphabet or not

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

也可以使用ASCII值

if((ch>=97 && ch<=122) || (ch>=65 && ch<=90))
{
    printf("Alphabet");
}
zqry0prt

zqry0prt7#

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

ifsvaxew8#

你可以实现下面的函数,返回一个布尔值,它检查输入是否只由字符组成,而不是数字,它也忽略空格。注意,它假设输入是由fgets而不是scanf收集的。如果你想使用另一种输入法,你应该只修改while条件。

bool is_character(char text[])
{
    bool just_letters;
    just_letters = true;
    while((text[i] != '\n') && (just_letters == true))
    {
        if ((text[i] >= 'A' && text[i] <= 'Z') || (text[i] >= 'a' && text[i] <= 'z') || text[i] == 32)
        {
            just_letters = true;
        }
        else
        {
            just_letters = false;
        }
    }
    return just_letters;
}

相关问题