Ist eine weitere for
Schleife in der Zählersektion (dritter Teil) einer for
Schleife erlaubt? In meinem Versuch, elegant Code zu schreiben, um ein rechtes Dreieck zu erzeugen, schrieb ich dies, aber es würde nicht kompilieren:
Nein, es sind nur Ausdrücke oder Deklarationen erlaubt.
EDIT: Es tut mir leid. Ich dachte, du sprichst von der Bedingung Teil der Schleife. Im Ausdrucksteil der Schleife sind nur Ausdrücke erlaubt.
Sie könnten einen Lambda-Ausdruck verwenden, der diese for-Schleife enthalten würde. Zum Beispiel
%Vor%Hier ist ein demonstratives Beispiel
%Vor%Die Ausgabe ist
%Vor%Oder Sie könnten den Lambda-Ausdruck außerhalb der äußeren Schleife definieren, um das Programm lesbarer zu machen. Zum Beispiel
%Vor% Berücksichtigen Sie, dass die in anderen Posts gezeigten verschachtelten Schleifen im Allgemeinen die Schleife nicht durch den Lambda-Ausdruck ersetzen können. Zum Beispiel kann die äußere Schleife continue
-Anweisungen enthalten, die die innere Schleife überspringen. Wenn Sie also benötigen, dass die innere Schleife in jedem Fall unabhängig von den continue-Anweisungen ausgeführt wird, ist diese Konstruktion mit dem Lambda-Ausdruck hilfreich.:
Es besteht keine Notwendigkeit, dies zu tun. Da die for-Schleife einfach durch eine while-Schleife ersetzt werden kann, kann jeder Teil der for-Schleife an einer anderen Stelle platziert werden, wo komplexe Konstruktionen verwendet werden können. In Ihrem Fall können Sie die Schleife einfach wie folgt ändern:
%Vor%Wenn Sie jedoch wirklich eine komplexe Aktion durchführen müssen, können Sie die gcc-Erweiterung (zusammengesetzte Anweisung) verwenden:
%Vor% Im Zählerabschnitt einer for()
-Schleife sind Ausdrücke erlaubt, Statements jedoch nicht.
Und jede for()
-Zeile in C / C ++ bildet eine neue Anweisung (es ist kein Ausdruck).
Sie können jedoch mehrere for()
-Schleifen verschachteln, wenn Sie möchten.
Zum Beispiel, da Sie eine neue Schleife in den Zählerabschnitten haben wollen, müssen Sie am Ende der Hauptschleife for()
eine Schleife durchführen.
Dies ist das Schema:
%Vor% Dies ist nicht möglich, da Bedingung und Teile von for
nur Ausdrücke enthalten können. Eine for
-Schleife ist jedoch eine Iterationsanweisung .
Schlingen Sie die Schleifen einfach wie normale Programmierer:
%Vor%Wenn es Ihnen nicht gut geht, können Sie ein Lambda verwenden:
%Vor% Eleganz kommt mit Klarheit.
Wenn ich eine Zeichenfolge erstellen möchte, konstruiere ich ein C ++ - Objekt namens std::string
.
Daher ist in diesem speziellen Fall kein verschachtelter for
-loop erforderlich.
Andernfalls fügen Sie eine for
-Anweisung in den Rumpf der äußeren Schleife ein, wie andere Antworten vorgeschlagen haben.
Hut ab, Michael Burr für den Vorschlag, lambda
zu verwenden. Und danke an die Kommentatoren, die mich auffordern, putchar()
zu benutzen.