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函数可以避免类型不匹配的错误。