簡答:我懷疑你打算while循環到一個副本debut
工作,而不是debut
本身。
- 讓我們假設
debut == 3
和fin == 5
。
- 我們執行for循環的第一次迭代,它涉及while循環的完整演練。
- 經過while循環後,我們有
debut == 0
,fin == 5
和i == 12
。
- 然後我們打印一些信息。
- 但是,我們現在要重新循環for循環。由於我們所做的工作,
debut
已減少到0
,所以每次我們運行此代碼時,在for循環迭代結束時,我們將有一個debut == 0
,這將導致for循環永遠不會退出。
可能更有助於顯示此內嵌代碼...
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);
}
就個人而言,我懷疑你正在尋找迭代一組數數字。這對我來說聽起來像是一個使用功能的完美場所。我建議的代碼看起來像這樣。
#include <stdio.h>
int iterations(int debut) {
int 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;
}
return i;
}
int main() {
int debut = 3;
int fin = 5;
for (;debut<=fin;debut++) {
printf("%d -> %d\n", debut, iterations(debut));
}
}
而且,只是指出事情的緣故,請注意,我已經在最後給出的示例代碼,我刪除了所有輸入scanf函數代碼。這與您的實際問題無關,它減少了任何人需要掃描的代碼總數,以瞭解您的問題所在。
如果您的問題已解決,您應該將其中一個答案標記爲已接受。 – nhgrif