2016-12-30 8 views
-2

Ich habe ein Programm, das wegen einer for-Schleife nicht funktioniert. Ich bin Einfügen eines Arbeits Code-Snippet hier:Warum gibt dieses Programm keine Ausgabe?

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    int numLoop = 19; 
    int counter; 
    int maxloops = 25; 
    int takenNum1 = 9, takenNum2 = 14, takenNum3 = 17, takenNum4 = 21, takenNum5 = 24; 

    for (counter=1; counter==maxloops; counter++) 
    { 
     printf("%d \n", counter); 

     if (counter == numLoop) 
     { 
      break; 
     } 

     if (counter == takenNum1 || counter == takenNum2 || counter == takenNum3 || counter == takenNum4 || counter == takenNum5) 
     { 
      counter++; 
      continue; 
     } 
    } 

    return 0; 
} 

Die erwartete Ausgabe lautet: 1 2 3 4 5 6 7 8 10 11 12 13 15 16 18 19

nichts gedruckt wird.

+0

Sie mit allen Warnungen kompilieren sollte und Debug-Informationen (gcc -Wall -Wextra -g', wenn Sie mit den [GCC] (http://gcc.gnu.org/) ...), verbessern Sie Ihren Code Bis Sie keine Warnungen erhalten, dann verwenden Sie den Debugger ** ('gdb'). Deine 'for'-Schleife ist falsch. –

+0

Ihre Frage * fix-my-code * ist hier nicht verfügbar. –

+1

Bitte zeigen Sie Ihre Forschung/Debugging-Aufwand so weit. Bitte lesen Sie zuerst die [Ask] -Seite. –

Antwort

6

Die Schleifenbedingung for erscheint fehlerhaft. Sie möchten counter != maxloops anstelle von counter==maxloops schreiben.

Andernfalls ist die Schleifenbedingung nicht erfüllt und der Schleifenkörper wird überhaupt nicht ausgeführt.

Das heißt, wie pro Ihre Anforderung,

  1. benötigen Sie bitte den Prüfblock

    if (counter == takenNum1 || counter == takenNum2 || counter == takenNum3 || counter == takenNum4 || counter == takenNum5) 
    { 
        counter++; 
        continue; 
    } 
    

    vor die printf() Anweisung zu vermeiden unbedingten Druck zu bewegen.

  2. Die for Schleifenbedingung sollte wie

    for (counter=1; counter < numloop; counter++) 
             ^^^^^^^^^^ 
    

    sehen wirklich wie Sie die Ausgabe beschränkt sein auf 19 wollen.

+0

Hallo, ich habe versucht, aber es schien nicht zu funktionieren –

+0

Entschuldigung, für den obigen Kommentar. Mein Snippet hat damit gearbeitet, aber mein ursprüngliches Programm nicht. Tut mir sehr leid für die Verwirrung. –

+2

@MythicCocoa In diesem Fall müssen Sie ein MCVE erstellen. –

1

Möglicherweise müssen Sie die Logik überprüfen. Wenn die Ausgabe maximal 19 Iterationen sein muss. Außerdem sollte die Inner-If-Bedingung vor dem Ausdrucken des Zählers überprüft werden.

Beispiel Pseudocode wie folgt.

for (counter=1; counter<=numLoop; counter++) 
{ 
    if (counter == takenNum1 || counter == takenNum2 || counter == takenNum3 || counter == takenNum4 || counter == takenNum5) 
    { 
     continue; 
    } 
printf("%d \n", counter); 

} 
1

Ich möchte den teachable Moment hier nutzen. Dies scheint eine einfache Sache zu sein, die Klauseln in einer for Aussage zu missverstehen. Eine for-Anweisung ist nur eine Abkürzung, um eine while-Schleife zu schreiben, wobei die Initialisierung und der "Nachher" -Code eingebaut sind. Die for-Anweisung hat drei Klauseln in ihrer Klammerliste - (init ; while ; after). Lassen Sie uns so verwenden, wie und Beispiel einer for Aussage, die als

geschrieben
for(i = 0 ; i < 10 ; i++) 
    { 
    do_something(); 
    } 

Die obige for Schleife neu geschrieben werden könnte unter Verwendung einer while Schleife als

i = 0; 

while(i < 10) 
    { 
    do_something(); 

    i++; 
    } 

Wie Sie sehen können, die for viel mehr ist kompakt.

+0

Ich hatte die Bedeutung des zweiten Satzes missverstanden: P –

1

Buddy ur Code sieht alles durcheinander. verstehe das Konzept des Loopings. In for loop Hör mir genau zu.

U haben die Bedingung logisch falsch gehalten. Die Schleife prüft den Zustand.Und Sie haben geschrieben, wie der Zähler gleich maxloop sein sollte, die nie in Ihrem ur-Code befriedigen wird, da der Code würde verlassen, wenn der Zähler den Wert 19 erreicht (Bruch ist gegeben, wenn der Zähler 19 erreicht). Hoffe das löst den ersten Teil.

Zweitens, bitte beachten Sie, dass die Schleife nach der Anzeige der Werte unterbrochen werden sollte. Zum besseren Verständnis habe ich den folgenden Code angegeben. Hoffe das hilft aus.

#include <stdio.h> 
#include <stdlib.h> 
int main() 
{ 
int numLoop = 19; 
int counter; 
int maxloops = 25; 
int takenNum1 = 9, takenNum2 = 14, takenNum3 = 17, takenNum4 = 21, takenNum5 = 24; 
for (counter = 1; counter <= maxloops; counter++) 
{ 
if (counter == takenNum1 || counter == takenNum2 || counter == takenNum3 || counter == takenNum4 || counter == takenNum5) 
{ 
continue; 
} 
printf("%d \n", counter); 
if (counter == numLoop) 
break; 
} 
getchar(); 
return 0; 
} 
+0

Bitte verwenden Sie korrektes Englisch. –

+0

@BobJarvis Bitte nehmen Sie das nicht als Straftat. Ich denke nicht, dass dies ein fairer Grund für die Anklage ist. Manche Leute sind nicht sehr gut Englisch wegen ihrer Herkunft (Englisch ist nicht ihre Muttersprache). Es scheint, dass er aus Indien kommt (viele Leute sind dort nicht sehr versiert, ich spreche aus eigener Erfahrung). –

Verwandte Themen