c - 区分用户输入是 int 还是 char/string

标签 c validation parsing

我正在尝试读取用户的输入。 我想区分提供的输入是 int、char 还是 string。

我尝试用 scanf_s 解决这个问题,但这并不奏效。有没有办法从用户那里获取输入,并判断这是一个整数、字符还是字符串?

这就是我目前所拥有的。

void CheckIfInt()
{
  char returnValue = 0;

  //loop until we are given a valid input
  while(true)
  {
    scanf_s("%c", &returnValue);
    scanf_s("%C");

    if(isdigit(returnValue))
    {
      //Do something
      break;
    }

    else if(returnValue == 'a')
    {
      //Do something else
      break;
    }
  }
}

最佳答案

您应该做的第一件事是不要使用整数指针,而是使用字符指针。这使得一次一个字节地查看整个输入变得更容易。所以你的代码应该是这样的:

void ReadInteger(char* value, bool isX) { ... }

下一部分取决于您要做什么,您是想读取整行作为一个输入还是读取一些内容直到遇到空格字符。我会假设后者,这又回到了你的问题。

如何判断你是否只是读取了一个字符

int isChar(char *value) {
    return value != NULL && strlen(value) == 1 && isalpha(value[0]);
}

如何判断你是否只是读取了一个整数

int isInteger(char *value) {
    int ans = 0;
    if (value != NULL && strlen(value) > 1) {
        while (*value && isdigit(*value)) {
            value++;
        }
        ans = (value == NULL);
    }
    ans;
}

如何判断你是否只是读取了一个字符串

我觉得很懒,所以这样做:

int isString(char *value) {
    return !isChar(value) && !isInteger(value);
}

请注意,整数检查方法会判断用户是否只输入了数字,但不会告诉您该数字是否适合 32 位整数。如果你想要这个效果,你可以很容易地修改代码来实现这个

关于c - 区分用户输入是 int 还是 char/string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31977398/

相关文章:

c - 在位操作中使用 'char' 变量

c - 矩阵乘法 : Small difference in matrix size, 时序差异大

.net - .NET 中的代码约定、测试、断言和异常,何时使用?

C++ 模板尖括号陷阱 - 什么是 C++11 修复?

swift - 如何仅解析出文件的实际名称而不是完整路径?

c++ - 如何旋转给定数字的位?

c++ - 扩展 Lua : check number of parameters passed to a function

php - Symfony2 : Unable to overwrite 'maxSize' and 'maxSizeMessage' in Image/File constraint

java - 如何验证 JSF 中的唯一性并向用户发送消息?

android - AdapterView 和 addView 的问题