是否可以使用%和双?如果不是我能做什么?

时间:2015-10-18 18:30:55

标签: c

要发布整个代码,如果还有别的东西可以帮助我。 该程序的想法是知道插入的数字是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是要走的路?

3 个答案:

答案 0 :(得分:4)

 scanf("%d",i);

传递int的地址。写这样 -

 scanf("%d",&i);

%运算符无法在doublefloat上使用。剩余只关注整数值。

使用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。