我的程序给了我错误(不完全是错误,但它只是打印错误而不是偶数或奇数),即使我放了一个或多个字母。如果我删除了isdigit检查程序(第3行),代码可以正常工作。我不知道我做错了什么。有人可以帮帮我吗。提前致谢。这是我的代码。
int main()
{
int n;
printf("Input an integer\n");
scanf("%d", &n);
if(!isdigit(n))
{
print("error");
return 0;
}
n%2 == 0 ? printf("Even\n") : printf("Odd\n");
return 0;
}
答案 0 :(得分:5)
isdigit
不是出于此目的。
如果要检查输入是否为vaild,则一种方法是使用%s
加载并使用strtol
。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
void print(const char *s) {
puts(s);
}
int main()
{
char nstr[100] = {0};
int n;
char *e;
printf("Input an integer\n");
scanf("%99s", nstr);
n=(int)strtol(nstr, &e, 10);
if(nstr[0] == '\0' || *e != '\0')
{
print("error");
return 0;
}
n%2 == 0 ? printf("Even\n") : printf("Odd\n");
return 0;
}
答案 1 :(得分:2)
isdigit函数检查一个字符,看它是否在&#39; 0&#39;到&#39; 9&#39;范围。更具体地说,它检查字符的ASCII值是否在48(&#39; 0&#39;的代码)和57(&#39; 9&#39;的代码)之间。
您将int传递给此函数,而不是字符,因此在此处使用此函数并不合适。只需删除此检查即可。