C - 不确定为什么这会返回无限循环



我正在尝试计算 0 和 1 数组中出现的 0 的数量。如果数组的一半为 0,我保留它。 如果没有,我改变它。为了方便起见,我开始计算第 2 位数字(索引 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;
}

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

你只需要重新初始化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;
}

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

一切似乎都可以使用

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

我想你会得到你预期的结果

最新更新