运行结果有时对有时错,

需要统计一个整数中不同字数出现的个数,运行结果有时候正确有时候不正确,求指教

#include
void f1(long num);
int main()
{
    long num;
    printf("please input a number:");
    scanf("%d",&num);    
    f1(num);
    return 0;
}
void f1(long num)
{
    int a[10]={0};
    for(int i=0;i<10;i++)
    {
        a[i]=0;
        
    }    
    while(num>0)
    {
        int b,t;
        b=num/10;
        t=num-b*10;
        a[t]++;
        num=b;                
    }
    printf("数字   0 1 2 3 4 5 6 7 8 9\n出现次数");
    for(int i=0;i<10;i++)
        printf("%d ",a[i]);            
}

运行结果如下

img

img

输入数值的位数,超过了long int 的范围了,建议用字符串输入,修改如下,供参考:

#include <stdio.h>
void f1(char*);  //(long num);
int main()
{
    char num[32];//long num;
    printf("please input a number:");
    scanf("%s", num); //scanf("%d", &num);
    f1(num);
    return 0;
}
void f1(char* num) //(long num)修改
{
    int a[10] = { 0 };
    //for (int i = 0; i < 10; i++)
    //{
    //    a[i] = 0;
    //}
    while (*num)//(num > 0)
    {
        a[*num -'0']++;
        num++;
        //int b, t;
        //b = num / 10;
        //t = num - b * 10;
        //a[t]++;
        //num = b;
    }
    printf("数字:    0 1 2 3 4 5 6 7 8 9\n出现次数:");
    for (int i = 0; i < 10; i++)
        printf("%d ", a[i]);
}

scanf 用%ld,定义的int b改成long