2016-12-03 2 views
-1

Ich bin neu in der Codierung und kann nicht verstehen, warum mein Code nicht funktioniert? Irgendwelche Syntaxfehler?Meine erste Schleife funktioniert nicht

#include <stdio.h> 
#include <cs50.h> 
int height; 
int row; 
int space; 
int hash; 

int main(void) 
{ 
    // ask user for input 
    do 
    { 
     printf("height: "); 
     height = GetInt(); 
    } 
    while (height < 0 || height > 23); 

    // make pyramid 

    for (row = 1; row >= height; row++) 
    { 
     for (space = (height - row); space > 0; space--) 
     { 
      printf("8 "); 
     } 

     for (hash = 1; hash >= (row+1); hash++) 
     { 
      printf("#"); 
     } 
     printf("\n"); 
    } 
    return 0; 
}  

Programm fragt Höhe, dann bekam es und beendet. (Loop funktioniert nicht).

+0

Sie sollten uns nicht fragen, ob es Syntaxfehler gibt. Dein Compiler sagt dir, wenn es welche gibt. Achten Sie auf das ';' am Ende Ihrer While-Schleife. Diese Schleife wird nicht viel tun ... Wo gehört das letzte '}'? Und in Bezug auf Ihre Frage im Allgemeinen: Was erwarten Sie, was passiert? – Gerhardh

+0

Compiler fordert dies ';' –

+0

Der Compiler möchte einen gültigen Ausdruck, der ein Block oder eine Anweisung sein könnte. Sie geben eine leere Anweisung an. – Gerhardh

Antwort

1

Ok, lässt den Anfang des Codes untersuchen:

while (height < 0 || height > 23); 

Hier können Sie sagen, dass die Höhe sollte entweder kleiner als Null oder höher als 23 sein Können Ihre Pyramide eine negative Höhe haben? Es wäre einfach zu wechseln besser sein:

while(height< 23) 

Auch Sie verwenden ; nach der Zeit. Während Syntax ist wie folgt:

while(condition) 
{ 
    do something; 
} 

habe ich versucht, den Code ausgeführt wird und wie es scheint, dass Sie die Logik falsch bekommen. Zum Beispiel, in der while, ändern Sie nicht den Zustand der Schleife, so dass es eine Endlosschleife. Passen Sie einfach die for richtig an und es wird funktionieren.

EDIT - Da Sie Do/While die Syntax verwenden, ist dies:

do 
{ 
    something; 
} 
while(condition); 

Die Aktion, die Sie in der Schleife ausgeführt werden sollen muss innerhalb der do Klammern sein.

+0

Ich nehme an, die while-Schleife sollte eher ein if sein: 'if (height> 0 && height <23);' Auch die Schleife sollte eine andere Bedingung bekommen: 'for (row = 1; row <= height; row ++)' Andernfalls wird die Schleife nicht viel tun, wenn die Höhe nicht 0 oder 1 ist. – Gerhardh

0

(bearbeitet: Diese Antwort ist Kontext aus, weil OP ihren Beitrag bearbeitet Als ich antwortete, gab es keine do { } while Aussage.)

Zusätzlich zu dem, was andere über Syntaxfehler gesagt haben, und Ihr Programm Logik, möchte ich Ihnen raten, vorsichtig über Semikolons an den falschen Stellen zu sein. Wenn Sie so etwas schreiben:

while (height < 0 || height > 23); 

... Sie werden ohne Ihre Programmschleife zu machen, so lange etwas zu tun, als die Bedingungen erfüllt sind. Die ; macht den Körper Ihrer While-Schleife leer.

Dies kann auch mit anderen Konstrukten passieren. Es ist sehr häufig, dass sich Leute in Foren beschweren, dass sie eine ganze Nacht damit verbracht haben, einen Fehler zu finden, nur um herauszufinden, dass es ein Semikolon an der falschen Stelle war.

Mein Tipp für Sie ist: immer verwenden Sie Klammern. Auch wenn sie nicht notwendig erscheinen.

Verwandte Themen