C 将数字中的数字5替换为6

C 将数字中的数字5替换为6,c,arrays,C,Arrays,我想把5换成6,然后打印号码 我想用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("

我想把5换成6,然后打印号码

我想用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;
}
#包括
#包括
int main()
{
int n,i=0,r,和=0;
而(1){
printf(“\n输入编号\n”);
scanf(“%d”和“&n”);
而(n>0)
{
r=n%10;
printf(“r为=%d\n”,r);
如果(r==5)
{
r=6;
}
总和=总和+(r*pow(10,i));
n=n/10;
i++;
}
printf(“新编号为:\t%d”,总和);
总和=0;i=0;
}
返回0;
}

正如其他人所指出的,这是一个浮点算术问题,输出的值
pow
略小于所需值(即获得199.999999而不是200,因此四舍五入为199)

无论如何,如果您只是想让它工作,您可以替换这一行:

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

sum=sum+(r*(int)(pow(10,i)+0.5));
它会变得恰到好处。 再一次,这只是一个快速的解决方案,将帮助您使程序工作,因为我假设您是C语言中的乞丐


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

正如其他人所指出的,这是一个浮点算术问题,
pow
输出的值略小于期望值(即得到199.999999而不是200,因此四舍五入为199)

无论如何,如果您只是想让它工作,您可以替换这一行:

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

sum=sum+(r*(int)(pow(10,i)+0.5));
它会变得恰到好处。 再一次,这只是一个快速的解决方案,将帮助您使程序工作,因为我假设您是C语言中的乞丐


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

我怀疑这是由于调用
pow()时出现了浮点问题
-它返回一个
double
,而不是整数类型。一个明显的问题是,您正在调用
pow
。这是一个浮点函数,不会产生精确的结果。对于您的应用程序来说,这也是完全不必要的。请删除
i
,并用从
1
开始的乘法器替换它。通过循环每次将其乘以
10
。使用调试器。逐行检查代码,并检查变量!(您的代码很短,因此很容易)我怀疑这是由于调用
pow()时出现浮点问题所致
-它返回一个
double
,而不是整数类型。一个明显的问题是,您正在调用
pow
。这是一个浮点函数,不会产生精确的结果。对于您的应用程序来说,这也是完全不必要的。请删除
i
,并用从
1
开始的乘法器替换它。每次循环时,将其乘以
10
。使用调试器。逐行检查代码,并检查变量!(您的代码很短,因此很容易)我不认为
pow(10,I)
将返回任何接近199.9999的整数
i
。@CiaPan True,我指的是pow的输出值,因此200可能是2*pow(10,2),而返回199.9999。我不认为
pow(10,i)
将返回任何接近199.9999的整数
i
。@CiaPan True,我指的是pow的输出值,因此200可能是2*pow(10,2),而不是返回199.9999。