繁体   English   中英

区分int或char /字符串与用户输入

[英]Distinguishing if int or char / string from user input

我正在尝试读取用户的输入。 我想区分提供的输入是整数,字符还是字符串。

我试着用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) { ... }

下一部分取决于您要执行的操作,是要读取整行作为一个输入,还是要读取某些内容,直到遇到空格为止。 我将假设稍后的内容,这又回到了您的问题。

如何判断您是否刚刚读了一个字符

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("failure\n");
else
    printf("valid integer followed by enter key\n");

原因:myNum将始终包含一个整数,因为它是一个整数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM