这段代码为我创造了一个无限循环我希望按照一些步骤将数字首次亮相为0并且打印程序执行该程序需要多少步骤
int debut,i;
printf("de (>= 1) ? ");
do
{
scanf("%d",&debut);
}
while (debut < 1);
int fin;
printf("a >= << << ) ? ");
do
{
scanf("%d",&fin) ;
}
while (fin < debut);
for (;debut<=fin;debut++){
i=0;
while(debut!=0)
{
if(debut%3==0)
{
debut+=4;
}
else if (debut%3!=0 && debut%4==0){
debut/=2;
}
else if (debut%3!=0 && debut%4!=0)
{
debut-=1;
}
i+=1;
}
printf("%d\n->%d",debut,i);
}
答案 0 :(得分:2)
for(debut<=fin;debut++) {
while(debut!=0) {
//do stuff
}
//debut == 0, debut <= fin
}
好的,大量编辑我的答案。我在看错了循环。
要进入for
循环,debut
必须为<=fin
。只要fin
为>0
,并且输入了for
循环,您就会陷入for
循环。
在while
返回debut == 0
之前,您一直停留在true
循环中。只要debut++ <= fin
,您就会陷入for
循环。您正在修改debut
循环中的while
,但fin
仍然是相同的值。因此while
循环将debut
减少为0
,for
循环每次都会进入下一次迭代。
答案 1 :(得分:2)
简短回答:我怀疑你打算将你的while循环用于debut
的副本,而不是debut
本身。< / p>
debut == 3
和fin == 5
。debut == 0
,fin == 5
和i == 12
。debut
已减少到0
,所以每次我们运行此代码时,在for循环迭代结束时,我们将得到{{1}这将导致for循环永不退出。与代码一起显示内容可能会更有帮助...
debut == 0
就个人而言,我怀疑你正在寻找一组数字的迭代次数。这听起来像是一个使用功能的完美场所。我建议的代码看起来像这样。
for (;debut<=fin;debut++){
// Let's assume we get here. We can assume some sane debut and fin values,
// such as the 3 and 5 suggested above.
int i=0;
while (debut != 0) {
// Stuff happens that makes debut go to zero.
}
// To get to this point, we __know__ that debut == 0.
// We know this because that's the condition in the while loop.
// Therefore, when we do the comparison in the for loop above for the
// next iteration, it will succeed over and over again, because debut
// has been changed to zero.
printf("%d->%d\n",debut,i);
}
另外,只是为了注意事项,请注意在我最后给出的示例代码中,我删除了所有输入的scanf代码。它与您的实际问题无关,它减少了任何人需要扫描的代码总量,以了解您的问题所在。