程序运行达不到目标结果,switch里头的东西打印不出来

33 22 C:\Users\hucan\Desktop\C\C语言\未命名65.cpp [Error] invalid operands of types 'int' and 'double' to binary 'operator%'这是出现了什么问题
程序运行达不到目标结果,switch里头的东西打印不出来


#include<stdio.h>
#include<math.h>

int main(void)
{
    int a,b = 0,d,i = 0;
    scanf("%d",&a);
    if(a < 0){
        printf("fu ");
        a = -a;
    }
    
    while(a > 10){
        int c = a;
        c /= 10;
        b++;
    }
    
    for(d = b;d > 0;d--){
        i = a / pow(10,d);
        switch(i){
            case 0:printf("ling ");break;
            case 1:printf("yi ");break;
            case 2:printf("er ");break;
            case 3:printf("san ");break;
            case 4:printf("si ");break;
            case 5:printf("wi ");break;
            case 6:printf("liu ");break;
            case 7:printf("qi ");break;
            case 8:printf("ba ");break;
            case 9:printf("jiu ");break;
        } 
        a %= pow(10,d);
    }
    
    return 0;
}

pow返回类型double, %运算需要整型
a %=pow(10,d);这个多余了,注释掉。

int main(void)
{
    int a, b = 0, d, i = 0;
    scanf("%d", &a);
    if (a < 0)
    {
        printf("fu ");
        a = -a;
    }
    int c = a;     //
    while (c >= 10) //(a > 10)
    {
        // int c = a;
        c /= 10;
        b++;
    }

    for (d = b; d >= 0; d--)
    {
        i = a / pow(10, d);
        i %= 10;
        switch (i)
        {
        case 0:
            printf("ling ");
            break;
        case 1:
            printf("yi ");
            break;
        case 2:
            printf("er ");
            break;
        case 3:
            printf("san ");
            break;
        case 4:
            printf("si ");
            break;
        case 5:
            printf("wu "); //
            break;
        case 6:
            printf("liu ");
            break;
        case 7:
            printf("qi ");
            break;
        case 8:
            printf("ba ");
            break;
        case 9:
            printf("jiu ");
            break;
        }
        // a %= (int)pow(10, d);
    }

    return 0;
}

报错的意思大概是,'int'和‘double’是操作符%的无效操作数。
观察到你的 “a%=pow(10,d)”这一条语句,库函数pow的原型是double pow (double base, double exponent),即函数的两个参数都是double型,程序中pow函数所传递的两个参数是10和d,但在函数调用过程中,会将函数类型进行自动转换,将10和d转换为double型,返回值也是double型。
a%=pow(10,d)等价于a=a%pow(10,d),a为int型,pow(10,d)为double1型。
而%取余运算符,只适用于整数操作数。所以会报错。

🌿,取模运算只能对int类型

【以下回答由 GPT 生成】

这个问题的原因是在使用pow函数时,返回的是一个double类型的值,而a和d是int类型的变量,所以在使用%运算符时发生了类型不匹配的错误。

为了解决这个问题,我们可以使用一个自定义的函数来替代pow函数。以下是修改后的代码:

#include<stdio.h>

int power(int base, int exponent) {
    int result = 1;
    while (exponent > 0) {
        result *= base;
        exponent--;
    }
    return result;
}

int main(void)
{
    int a, b = 0, d, i = 0;
    scanf("%d", &a);
    if (a < 0) {
        printf("fu ");
        a = -a;
    }

    int c = a;
    while (c > 10) {
        c /= 10;
        b++;
    }

    for (d = b; d >= 0; d--) {
        i = a / power(10, d);
        switch (i) {
            case 0: printf("ling "); break;
            case 1: printf("yi "); break;
            case 2: printf("er "); break;
            case 3: printf("san "); break;
            case 4: printf("si "); break;
            case 5: printf("wu "); break;
            case 6: printf("liu "); break;
            case 7: printf("qi "); break;
            case 8: printf("ba "); break;
            case 9: printf("jiu "); break;
        }
        a %= power(10, d);
    }

    return 0;
}

现在程序应该能够正确输出结果了。我在代码中使用了一个自定义的函数power,它接受一个基数和指数,返回计算结果。不再使用pow函数可以避免类型不匹配的错误。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^