C语言 区分用户输入是int还是char / string



我正在尝试从用户读取输入。我想区分提供的输入是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;
    }
  }
}

首先应该做的是不要使用整型指针,而是使用char指针。这使得一次一个字节地查看整个输入变得更加容易。所以你的代码应该是这样的:

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

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

如何判断是否刚刚读取了一个char

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位整数。如果您想要这种效果,您可以很容易地修改代码来实现

您可以使用fgets将输入读入字符数组,然后使用sscanf对其进行解析。您可以查看字符数组,看看它是什么类型的数据。如果您提供一个输入示例,我可以向您展示代码。

这应该有帮助。您可以操作代码。

int myNum;
char myTerm;
if(scanf("%d%c", &myNum, &myTerm) != 2 || myTerm != 'n')
    printf("failuren");
else
    printf("valid integer followed by enter keyn");

原因:myNum总是包含一个整数,因为它是int

最新更新