数组中有一个数值3作为数组元素,但是将数组元素作为参数传进判断是否为0到9的函数后,不确定数组元素传进去的到底是一个什么值

img


数组中有一个数值3作为数组元素,但是将数组元素作为参数传进判断是否为0到9的函数后,返回值不正确,不确定数组元素传进去的到底是一个什么值

回答:原因很简单,因为char底层也是数字,在0-127范围内,所有你实际上是在和 1,2,3...,即ASCII编码为39,40,41的进行比较,改写一下代码就知道了,判断是数字的话,要正确的比较哦

#include <stdio.h>

int myIsDigit(char c)
{
    if(c == 1 || c == 2 || c == 3 || c == 4 || c == 5 || c == 6 || c == 7 || c == 8 || c == 9)
    {
        return 0;
    }
    else
    {
        return -1;
    }
}

int myIsCharDigit(char c)
{
    if(c == '1' || c == '2' || c == '3' || c == '4' || c == '5' || c == '6' || c == '7' || c == '8' || c == '9')
    {
        return 0;
    }
    else
    {
        return -1;
    }
}

int main()
{
    char c[1] = {'3'};
    char m, s;
    printf("%c\n", c[0]);
    printf("%d\n", myIsDigit(3));
    printf("%d\n", myIsDigit(c[0]));
    m = c[0];
    printf("%d\n", myIsDigit(m));
    s = '3';
    printf("%d\n", myIsDigit(s));
    
    printf("%c\n", c[0]);
    printf("%d\n", myIsCharDigit(3));
    printf("%d\n", myIsCharDigit(c[0]));
    m = c[0];
    printf("%d\n", myIsCharDigit(m));
    s = '3';
    printf("%d\n", myIsCharDigit(s));
    
    return 0;
}