我不知道为什么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;
}
}
答案 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