Wie erstellt man eine Verbindung für die Schleife in C ++?

7

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:

%Vor%     
lifebalance 07.09.2014, 17:13
quelle

8 Antworten

7

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.:

    
Vlad from Moscow 07.09.2014, 17:16
quelle
5

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%     
Alexey Shmalko 07.09.2014 17:24
quelle
4

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%     
pablo1977 07.09.2014 17:21
quelle
3

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%     
jrok 07.09.2014 17:26
quelle
2

Kürzeste mögliche Lösung:

%Vor%

Ausgabe:

%Vor%

LIVE DEMO

    
Piotr Skotnicki 07.09.2014 17:55
quelle
1

Eleganz kommt mit Klarheit. Wenn ich eine Zeichenfolge erstellen möchte, konstruiere ich ein C ++ - Objekt namens std::string .

%Vor%

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.

    
René Richter 08.09.2014 14:51
quelle
1

Hut ab, Michael Burr für den Vorschlag, lambda zu verwenden. Und danke an die Kommentatoren, die mich auffordern, putchar() zu benutzen.

%Vor%

LIVE DEMO

    
lifebalance 07.09.2014 17:42
quelle
0

Ich denke, wir sollten verschleierten Code vermeiden, wenn wir nicht dafür bezahlt werden, dass der Code komplex wird.

    
MoBaShiR 08.09.2014 12:32
quelle

Tags und Links