C 计算整数中数字的出现次数

C 计算整数中数字的出现次数,c,function,C,Function,我想计算某个数字在整数中出现的频率。我有以下代码: int main() { printf ("Put numbers\n"); int cislo; int s0,s1,s2,s3,s4,s5,s6,s7,s8,s9; while(scanf("%d",&cislo)==1){ if (cislo<0) printf ("Cislo %d, je zaporne, takove neberu", cisl

我想计算某个数字在整数中出现的频率。我有以下代码:

int main()
{
    printf ("Put numbers\n");

    int cislo;
    int s0,s1,s2,s3,s4,s5,s6,s7,s8,s9;

    while(scanf("%d",&cislo)==1){
        if (cislo<0)
            printf ("Cislo %d, je zaporne, takove neberu", cislo);
        continue;
    }

    s0=s1=s2=s3=s4=s5=s6=s7=s8=s9=0;
    do{
        (cislo/=10);
        switch (cislo%10){
            case 0: ++s0; break;
            case 1: ++s1; break;
            case 2: ++s2; break;
            case 3: ++s3; break;
            case 4: ++s4; break;
            case 5: ++s5; break;
            case 6: ++s6; break;
            case 7: ++s7; break;
            case 8: ++s8; break;
            case 9: ++s9; break;
        }
    }while (cislo>0);

    printf ("Zadane cislo se sklada z cislic: \n\n 0 ... %dx \n 1 ... %dx \n 2 ... %dx \n 3 ... %dx \n 4 ... %dx \n 5 ... %dx \n 6 ... %dx \n 7 ... %dx \n 8 ... %dx \n 9 ... %dx \n",s0,s1,s2,s3,s4,s5,s6,s7,s8,s9);

    return 0;
}
intmain()
{
printf(“输入数字”);
int cislo;
int s0、s1、s2、s3、s4、s5、s6、s7、s8、s9;
而(scanf(“%d”,&cislo)==1){
if(cislo0);
printf(“Zadane cislo se sklada z cislic:\n\n 0…%dx\n 1…%dx\n 2…%dx\n 3…%dx\n 4…%dx\n 5…%dx\n 6…%dx\n 7…%dx\n 8…%dx\n 9…%dx\n”,s0、s1、s2、s3、s4、s5、s6、s8、s9);
返回0;
}
它必须如何工作:

Put number: 1111111111 Number: 1111111111 include: 0 ... 0x 1 ... 10x 2 ... 0x 3 ... 0x 4 ... 0x 5 ... 0x 6 ... 0x 7 ... 0x 8 ... 0x 9 ... 0x 输入号码: 1111111111 电话:1111111 包括: 0…0x 1…10倍 2…0x 3…0x 4…0x 5…0x 6…0x 7…0x 8…0x 9…0x 实际工作原理:

Put number: 1111111111 Number: 1111111111 include: 0 ... 1x 1 ... 9x 2 ... 0x 3 ... 0x 4 ... 0x 5 ... 0x 6 ... 0x 7 ... 0x 8 ... 0x 9 ... 0x 输入号码: 1111111111 电话:1111111 包括: 0…1x 1…9倍 2…0x 3…0x 4…0x 5…0x 6…0x 7…0x 8…0x 9…0x
有人知道为什么吗?

在服用
mod
后将数字除以:

 do{
    switch (cislo%10){
    case 0: ++s0; break;
    case 1: ++s1; break;
    case 2: ++s2; break;
    case 3: ++s3; break;
    case 4: ++s4; break;
    case 5: ++s5; break;
    case 6: ++s6; break;
    case 7: ++s7; break;
    case 8: ++s8; break;
    case 9: ++s9; break;
    }
    cislo/=10;
 }while (cislo>0);
因此,您在计数时丢失了一个数字

您的输入方法不是很好。因为,您只希望接收一个整数:

while(scanf("%d",&cislo)!=1){
这更合适


您还可以使用数组
s[10]
而不是10个整数。

在循环时更改
do
/

do {
    int nextval = cislo / 10;

    switch (cislo - (nextval*10)) {
        case 0: ++s0; break;
        case 1: ++s1; break;
        case 2: ++s2; break;
        case 3: ++s3; break;
        case 4: ++s4; break;
        case 5: ++s5; break;
        case 6: ++s6; break;
        case 7: ++s7; break;
        case 8: ++s8; break;
        case 9: ++s9; break;
    }

    cislo = nextval;
} while (cislo>0);

请编辑您的问题,因为它不可读。您应该计算出如果只输入一个数字(例如,
1
)会发生什么情况,并且当您理解这一点时,您可以测试
11
,然后测试
11111111
(如果从小/简单的情况开始,调试效果最好。)请帮自己一个忙并使用数组。