要发布整个代码,如果还有别的东西可以帮助我。 该程序的想法是知道插入的数字是5的倍数,10的幂或完美的正方形(我不是英文,有点不确定这个单词是否是我正在寻找的那个)
int main (void){
int i,b=0,rqi;
printf("Insert a number from 1 to 10000: ");
scanf("%d",i);
double rq=sqrt(i),p=log(i);
if(i%5==0){
printf("It's a multiple of 5\n");
b=1;
}
if(p%1==0){
int pi=p;
printf("It's a power of 10 (%d=10^%d)\n",i,pi);
b=1;
}
if(rq%1.0==0){
rqi=rq;
printf("It's a perfect square (%d = %d*%d)\n",i,rqi,rqi);
}
if(b==0){
printf("It doesn't satisfies any condition.\n");
}
return 0;
}
我得到的错误是
warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘int’ [-Wformat=]
scanf("%d",i);
^
error: invalid operands to binary % (have ‘double’ and ‘int’)
if(p%1==0)
^
invalid operands to binary % (have ‘double’ and ‘double’)
if(rq%1.0==0)
另外,我学到了一点java而不是C,有没有办法制作一个布尔值或者让一个int 0或1是要走的路?
答案 0 :(得分:4)
scanf("%d",i);
传递int
的地址。写这样 -
scanf("%d",&i);
%
运算符无法在double
或float
上使用。剩余只关注整数值。
使用fmod
函数完成上述任务以获得余数。
像这样,您可以执行此操作并将其合并到if
条件 -
fmod(p,1.0) // gives remainder of p divided by 1.0
但可能无法使用double
比较==
值。
答案 1 :(得分:1)
好像你应该检查fmod功能。
另外,如果你想检查double是否是整数范围,你可以使用floor函数来检查它的值是否等于它的楼层值。
if(double_num == floor(double_num)) return 1;
else return 0;
答案 2 :(得分:1)
你基本上是在处理整数。浮点运算有其不准确之处;与整数进行比较可能更好。
int is_square(unsigned int x)
{
int r = sqrt(x) + 0.5;
return (r*r == x);
}
这里,首先计算(粗略)舍入的整数根。然后你检查一下它的平方是否能让你回到你的原始号码。
int is_power10(unsigned int x)
{
while (x && x % 10 == 0) x /= 10;
return (x == 1);
}
剥去尾随零。如果剩下的都是1,那么你的权力就是10。