从用户输入中区分int或char / string

时间:2015-08-13 00:03:02

标签: c validation parsing

我试图读取用户的输入。 我想区分提供的输入是int,char还是字符串。

我尝试用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;
    }
  }
}

3 个答案:

答案 0 :(得分:1)

你应该做的第一件事是不使用整数指针而是使用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位整数。如果您想要这种效果,可以轻松修改代码以实现此功能

答案 1 :(得分:0)

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

答案 2 :(得分:0)

这应该有所帮助。你可以操纵代码。

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将始终包含一个整数,因为它是一个int