2017-10-26 1 views
-1

Also mache ich ein Programm, das ein Quadrat basierend auf der vom Benutzer gewünschten Größe erstellen wird. Mein Code liest bisher den Wert, druckt das obere Ende des Quadrats aus, aber ich werde wegen einer verschachtelten Schleife, die ich erstellt habe, davon abgehalten, wie ich die Seiten einrichten soll. Das Problem hier ist, dass ich für die Schleife die Werte jedes Mal zurücksetzen muss, wenn es existiert.Verschachtelte Schleifen C++

Hier ist mein Code so weit:

#include <iostream> 

using namespace std; 

int main(int,char**) { 
    int x; 
    int z=1; 
    int l=0; 
    int n=0; 
    int q=1; 
    int m=0; 
    int o=0; 
    do{ 
    cout << "Enter length between 0 and 64 (-1 to exit): "; 
    cin >> x; 
    if (x>-1&&x<64){ 
     cout << "+"; 
     for (;x-2!=n;++n){ 
     cout << "-"; 
     } 
     cout << "+" << endl; 
    } 
    else{ 
     cout << "Length must be between 0 and 64 inclusive, or enter -1 to exit."; 
    } 
    do { 
     cout << "|"; 
     do { 
     //cout << " "; 
     //++m; 
     //}while (x-2!=m); 
     cout << "|" << endl; 
     ++o; 
     } 
     while (x-2!=o); 
     ++z; 
    } 
    while (z!=5); 
    } 

Der auf Kommentar Teil ist, wo wird das Programm mit bis erwischt, wie es scheint, dass, wenn ich m erhöht, bis er die do while-Schleife beendet wird, es auf das hält Wert, auf den es erhöht wurde. Ich weiß, dass eine Aussage bricht aus der Schleife weiter und beginnt eine neue Iteration der Schleife, aber es scheint nicht einmal in der do-while-Schleife passen zu wollen, wenn ich eine if-Anweisung wie

if (x-2==m){ 
continue; 
} 
erstellen

Jede Hilfe würde geschätzt werden

+2

'while (z = 1);' ist definitiv falsch. –

+1

Dieser Teil: '(x> -1 || x <64)' ist gebrochen, weil "||" OR bedeutet, also kann ich einfach eine Zahl größer als -1 (2000) oder niedriger als 64 (-2000) wählen. Sie müssen die '&&' setzen, um es zu einem UND zu machen. Sie können hier mehr über Operatoren in C und C++ lesen: https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B –

+0

@PaulRooney Ich brauche das Programm, um 5 mal zu laufen, also reparierte ich die Schleifenfunktion. Danke für den Fang oder sonst würde es für immer in einer Schleife laufen. –

Antwort

1

Setzen Sie einfach m = 0; vor der Schleife.

m = 0; 
do { 
    cout << ' '; 
    ++m; 
} while (x-2 != m); 

Oder verwenden Sie stattdessen eine for Schleife;

for (int m = 0; m != x-2; m++) { 
    cout << ' '; 
} 

Dies ist das häufigere Idiom etwas auf eine bestimmte Anzahl von Malen zu wiederholen, da Sie in die Schleife an einem einzigen Ort im Zusammenhang all Bedingungen sehen.

+0

Warum ist die Platzierung der Int-Definition von Bedeutung? In diesem Fall wurde int m erst in der verschachtelten do while-Schleife berührt. Es funktioniert jetzt, aber ich verstehe nicht, warum die Platzierung die Schleife bewirkt hat. Ich werde es als eine Norm verwenden, um definierende Ints vor ihrer verbundenen Schleife zu gruppieren, es hilft definitiv, sie zu sehen. Jede Anleitung wäre willkommen, danke –

+0

Die Variable, die zum Indizieren der For-Schleife verwendet wird, wird außerhalb der Schleife nicht benötigt, daher deklarieren Sie sie lokal. – Barmar

Verwandte Themen