2017-05-14 4 views
2

Ich versuche, die Anzahl der Nullen zu zählen, die in einem Array von Nullen und Einsen vorkommen. Wenn die Hälfte des Arrays 0 ist, behalte ich es. Wenn nicht, ändere ich es. Ich fange aus Bequemlichkeit an der 2. Ziffer (Index 1) zu zählen. Ich bin nicht mit Index 0 beschäftigt und zähle es nicht. Ich bin nicht sicher, warum ich eine Endlosschleife mit diesem bekommen .. könnte es die Gleichheit innicht sicher, warum dies eine Endlosschleife zurückgibt

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

'anderes zu verstehen {' -> 'else {z = 0; ' – BLUEPIXY

+0

kümmert sich das sonst nicht um dieses Problem? wenn die else-Anweisung funktioniert, wäre es 4 .. – shoestringfries

+0

nein, denn wenn z! = 4 du gehst in die for-Schleifen, aber z ist schon> 4, also wirst du nie erreichen (g = 1) – CIsForCookies

Antwort

4

Nach dem ersten für Schleife der z-Wert 8 sein wird, so Wert g wird nie sein 1.

+1

Antwort mit Code, dass er falsch tun würde klarer wäre zu verstehen. –

2

Alles scheint nur OK

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

verwenden Sie Ihr erwartetes Ergebnis glaube ich

+2

Dank NJRips ja wegen mit z == 4 wird es nie aus dem Wert 0 heraus. Deshalb erhalten Sie Endlosschleife –

+0

Vielen Dank für Ihr Feedback MAK – Sparky

2

Sie müssen nur z=0 jede Schleife neu initialisieren, da Sie in jeder Schleife ein anderes Array haben. Hier ist der Code:

#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; 
} 

Hinweis: Verwendung Vertiefung und versucht, neu zu schreiben ist es besser, der Fluss des Programms ist es nicht einfach, hier

Verwandte Themen