2013-10-25 279 views
0

這段代碼創建了我一個無限循環,我想遵循一些步驟獲得數出道0 ADN打印多少步驟tooks程序做無限while循環在C

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

如果您的問題已解決,您應該將其中一個答案標記爲已接受。 – nhgrif

回答

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循環。您正在修改while循環中的debut,但fin保持相同的值。因此,while循環將debut減少爲0,並且for循環每次都會進行下一次迭代。

+1

不是真的(理論上):有初次亮相 - = 1。這樣做2^32次左右應該這樣做 – Thomas

+0

我認爲你不瞭解這裏的問題。這看起來像一個syracuse序列。沒有無限循環的證據或沒有。即使如此,更改爲> 0也不應該執行任何操作 – Thomas

+0

此代碼仍然不起作用 –

2

簡答:我懷疑你打算while循環到一個副本debut工作,而不是debut本身。


  • 讓我們假設debut == 3fin == 5
  • 我們執行for循環的第一次迭代,它涉及while循環的完整演練。
  • 經過while循環後,我們有debut == 0,fin == 5i == 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函數代碼。這與您的實際問題無關,它減少了任何人需要掃描的代碼總數,以瞭解您的問題所在。

+0

打敗我一拳! :) – mocj