为什么返回不能使用此代码?

时间:2017-10-10 11:53:59

标签: c for-loop return

我用C语言创建了一个代码,用于查找长双数的小数点以外的总位数,这就是代码 -

#include <stdio.h>
int main(void)
{
    long double number,temp; int num,count=0;
    printf("\nEnter a number=");
    scanf("%Lf",&number);
    printf("\nEnter multiplication factor=");
    scanf("%d",&num);
    if(num>10)
    {
        printf("\nPlease enter a multiplicative factor <10");
        return 1;
    }
    if(number>0)
    {
       for(int i=0;i<num;i++)
       {
        number=number*10;
        temp=number-(int)number;
        printf("\ntemp=%Lf\n",temp);
        if(temp!=0)
        {
        count=count+1;
        }
        else
        {   
            return 1;
        }
       }
       printf("\nTotal number of decimal points=%d",++count);

    }
    else if (number<0)
    {
        number=(-1)*number;
        for(int i=0;i<num;i++)
       {
        number=number*10;
        temp=number-(int)number;
        printf("\ntemp=%Lf\n",temp);
        if(temp!=0)
        {
        count=count+1;
        }
        else
        {   
            return 1;
        }
       }
       printf("\nTotal number of decimal points=%d",++count);
    }
    else
    {
        printf("\nNumber has no decimal points\n");
    }
}

我使用了可以通过示例理解的逻辑 -
如果number = 45.123
和倍增系数= 5
那么数= 45.123 * 10 = 451.23和temp = 451.23-451 = 0.23
           = 451.23 * 10 = 4512.3,temp = 4512.3-4512 = 0.3
           = 4512.3 * 10 = 45123,temp = 45123.0-45123 = 0.0

这就是程序应该终止的地方,因为我已经使用了返回1,但它没有按照这种方式工作,因为程序将数字乘以10乘以倍增因子。

这里是输出 -

aalpanigrahi@aalpanigrahi-HP-Pavilion-g4-Notebook-PC:~/Desktop/Daily programs$ ./decimal

Enter a number=45.123

Enter multiplication factor=5

temp=0.230000

temp=0.300000

temp=0.000000

temp=0.000000

temp=0.000000

Total number of decimal points=6 

1 个答案:

答案 0 :(得分:-2)

抱歉,我一开始误解了你的代码。 问题是你使用!=比较一个浮点数和一个int。你永远不应该这样做。尝试与

进行比较
if(temp!=0.0f)

更好的是与非常小的数字进行比较:

if (temp<0.00000001f)
像这样:

if(number>0)
{
   for(int i=0;i<num;i++)
   {
      number=number*10;
      temp=number-(int)number;
      printf("\ntemp=%Lf\n",temp);
      if(temp<0.0000001f)
      {
         count=count+1;
      }
      else
      {   
         return 1;
      }
  }
  printf("\nTotal number of decimal points=%d",++count);

}