关于while循环的问题

#include<stdio.h>
int judge(int n)//判断数字是否为素数
{
int i;
if(n==2)
return 0;
else for(i=2;i<n;i++)
{
if(n%i==0)
break;
}
if(i==n)
return 0;
else return 1;
}
int main()
{
int n,i;
scanf("%d",&n);
printf("%d=",n);
while(judge(n))
{
for(i=2;i<n;i++)
{
if(n%i==0)
{printf("%d*",i);
n/=i;
break;
}
}
}
printf("%d",n);
return 0;
}
#include<stdio.h>
int judge(int n)
{
int i;
if(n==2)
return 0;
else for(i=2;i<n;i++)
{
if(n%i==0)
break;

}
if(i==n)
return 0;
else return 1;
}
int main()
{
int n,i;
scanf("%d",&n);
printf("%d=",n);
while(judge(n))
{
for(i=2;i<n;i++)
{
if(n%i==0)
{printf("%d*",i);
n/=i;
break;
}
}
printf("%d",n);
}

return 0;

}

img


img


麻烦问下为什么printf写在循环里面两个3输出值为随机值,但是写在外面就可以正常输出?
十分感谢!

你的错误的输出结果应该这样看

90=2*45
45=3*15
15=3*5

而你每次while循环里面的 printf("%d",n); 没有输出换行,所以结果就变成了

90=2*453*153*5

所以出现这个的原因就是你在while里面将计算过程中的 n 值给输出了,那么当你将 printf("%d",n); 移到while 外当然就没问题了。

那不是随机值
你是把运算过程也给打印出来了
本来只应该打印3,可是你把4和5这些不该打印的也打印了
不就变成453了吗

你放在while循环外面表示当n最后为素数的时候打印一下,即90 = 233*后面追加一个5。
你的for循环保证打印的是素数,while循环结束打印的也是素数,这样才是正确的。
但是放在while循环里面就是每一次while循环你都打印n的值,所以导致出现好像是随机值的结果,其实他不是随机值,每次的值都是一样的。这样打印的值不能保证是素数。