isalpha()和isdigit()始终返回0

时间:2013-12-02 19:12:03

标签: c ctype

我不知道为什么isdigit()isalpha()继续这样做。无论我如何使用它们,它们总是返回0。我不正确地使用它们还是我的编译器正在运行?

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

//example of isdigit not working, it ALWAYS returns 0 no matter what the input is.
int main()
{
  int num=0;
  int check=0;

  printf("Enter a number: ");
  fflush(stdin);
  scanf("%d",&num);
  //Just checking what value isdigit has returned
  check=isdigit(num);
  printf("%d\n",check);
  if(check!=0)
  {
       printf("Something something");
       system("pause");
       return 0;
       }
  else
  {
       system("pause");
       return 0;
       }
}

4 个答案:

答案 0 :(得分:1)

isdigit作用于int,但它应该被char扩展为int。您正在读取数字并将其转换为二进制表示,因此除非您的inout恰好是匹配0 - '9'(即0x30 - 0x39)的值,否则您将得到错误。

如果您想使用isdigit(),则必须在用户输入的字符串中的单个字符中使用它作为数字,因此您应该使用%s%c作为单个数字,并循环遍历字符串。

示例:

char c;
scanf("%c",&c);
check=isdigit(c);

或(快速而肮脏的例子)

char buffer[200];
if (scanf("%s", buffer) > 1)
{
    int i;
    for(i = 0; buffer[i] != 0; i++)
    {
        check=isdigit(buffer[i]);
    }
}

答案 1 :(得分:1)

将您的scanf ("%d"...)与scanf ("%c"...)以及num的定义从int更改为char。您也可以更改变量名称,因为isalpha()isdigit()不能使用“数字”但是使用“ASCII字符代码”(实际上是数字),以及来自{{的提示消息1}}到"Enter a number"

答案 2 :(得分:0)

您应该将字符数字逐字传递给isdigit。在%d中将%c说明符替换为scanf。并删除行

fflush(stdin);  

它可能会调用未定义的行为(如果您不在MS-DOS上)。

答案 3 :(得分:0)

您想要检查字符而不是数字。 0'0'不一样。第一个是integer,第二个是character。 改变:

  char character =0;
  int check = 0;

  printf("Enter a number: ");

  scanf("%c", &character);
  printf("%d\n",character);

  check = isdigit(character);
  if(check != 0) {
       printf("Something something\n");
       return 0;
  }
  else{
       return 0;
  }

行动中:

Enter a number: 5
53 # ASCII code of 5
2048
Something something

Enter a number: a
97 #ASCII code if a
0