我正在尝试计算 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;
}
我想你会得到你预期的结果