我试图计算在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 :(得分: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;
}
我认为你会得到你期望的结果