检查数字是偶数还是奇数

时间:2015-09-20 14:22:03

标签: c

我的程序给了我错误(不完全是错误,但它只是打印错误而不是偶数或奇数),即使我放了一个或多个字母。如果我删除了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;
}

2 个答案:

答案 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传递给此函数,而不是字符,因此在此处使用此函数并不合适。只需删除此检查即可。