2017-05-14 60 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; 
} 

提示:使用缩进并尝试将其更好地重新编写,程序的流程是不容易明白这里

相关问题