2017-05-14 86 views
2

我想要計數在0和1的數組中發生的0的數量。如果數組的一半是0,我保留它。如果不是,我改變它。爲了方便起見,我開始計算第二位數(索引1)。我不關心索引0,不計算它。我不知道爲什麼我得到這個無限循環..難道是在不知道爲什麼這將返回一個無限循環

if (z == 4){ 
     g = 1; 
    } 

#include "stdlib.h" 
#include "stdio.h" 

int main(){ 
    int i, j, z, g; 
    z = 0; 
    int ar[9] = {0,0,0,0,0,0,0,0,0}; 
    g = 0; 
    while(!g){ 
    for(i = 1; i < 9; i++){ 
     printf("%d", ar[i]); 
     if (ar[i] == 0){ 
     z++; 
     } 
    } 
    if (z == 4){ 
     g = 1; 
    } 
    else { 
     for (i = 1; i < 5; i++){ 
     ar[i] = 0; 
     } 
     for (i = 5; i < 9; i++){ 
     ar[i] = 1; 
     } 
    } 
    } 
    printf("\n %d", z); 
    return 0; 
} 
+0

'其他{' - >'否則{Z = 0;' – BLUEPIXY

+0

不會照顧這個問題嗎?如果else語句有效,它將是4 .. – shoestringfries

+0

不,因爲如果z!= 4,你進入for循環,但是z已經大於4,所以你永遠不會達到(g = 1) – CIsForCookies

回答

4

平等的第一個for循環後,Z值將是8,G值會永遠是1

+1

答案與代碼,他做錯了將更明白瞭解。 –

2

一切似乎確定只使用

if (z >= 4){ 
    g = 1; 
} 

你會得到您預期的結果,我認爲

+2

謝謝NJRips是因爲使用z == 4它永遠不會從數值0中跳出。這就是爲什麼你會遇到無限循環 –

+0

感謝您的反饋MAK – Sparky

2

你只需要重新初始化z=0每個循環,因爲每個循環都有不同的數組。下面是代碼:

#include <stdlib.h> /*Use <libname.h> instead of "libname.h"*/ 
#include <stdio.h> 

int main(){ 
    int i, j, z, g; 
    z = 0; 
    int ar[9] = {0,0,0,0,0,0,0,0,0}; 
    g = 0; 
    while(!g){ 
     z=0; /*You must re-initializate the z value every loop*/ 
     for(i = 1; i < 9; i++){ 
      printf("%d", ar[i]); 
      if (ar[i] == 0){ 
       z++; 
      } 
     } 
     if (z == 4){ 
      g = 1; 
     }else { 
      for (i = 1; i < 5; i++){ 
       ar[i] = 0; 
      } 
      for (i = 5; i < 9; i++){ 
       ar[i] = 1; 
      } 
     } 
    } 
printf("\n %d", z); 
return 0; 
} 

提示:使用縮進並嘗試將其更好地重新編寫,程序的流程是不容易明白這裏

相關問題