不知道为什么这会返回一个无限循环

时间:2017-05-14 06:56:51

标签: c logical-operators

我试图计算在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;
}

3 个答案:

答案 0 :(得分:4)

在第一个for循环之后,z值将为8,因此g值永远不会为1.

答案 1 :(得分: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;
}

提示:使用缩进并尝试更好地重写它,程序的流程在这里不容易理解

答案 2 :(得分:1)

一切似乎都可以使用

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

我认为你会得到你期望的结果