用数字6代替数字5

时间:2019-06-13 18:34:55

标签: c arrays

我想用6代替5并打印数字

我想用6代替5并打印数字,但是我不明白我的代码有什么问题。例如,当我给出200时,输出应该相同,即200,但给出199,而当我给出205作为输入而不是给出206作为输出时,它给出205本身。

#include<stdio.h>
#include<math.h>
int main()
{
    int n,i=0,r,sum=0;
    while(1){
        printf("\nenter no\n");
        scanf("%d",&n);
        while(n>0)
        {
            r=n%10;
            printf("r is= %d\n",r);
            if(r==5)
            {
                r=6;
            }
            sum=sum+(r*pow(10,i));
            n=n/10;
            i++;
        }
        printf("new no is:\t %d",sum);
        sum=0;i=0;
    }
    return 0;
}

1 个答案:

答案 0 :(得分:4)

就像其他人指出的那样,这是一个浮点算术问题,输出的pow值比期望值小一点(即,获取199.999999而不是200,因此将其舍入为199)。 There is a similar post about this behaviour.

无论如何,如果您只希望它能正常工作,则可以替换此行:

sum=sum+(r*pow(10,i));

具有:

 sum=sum+(r*(int)(pow(10,i)+0.5));

,它将四舍五入到正确的位置。 再次,这只是一个快速的解决方案,它将帮助您使程序正常工作,因为我认为您是C语言的入门者。

但是我强烈建议您阅读编程语言中的浮点算术行为,以及为什么在C / C ++中对整数使用pow是一个不好的习惯。