For-Schleife Befehl zwischen dem Hochzählen?

4 Antworten

Syntax einer for-Schleife:

for(init; test; incr) {
body;
};

init: Initialisierung - wird vor Eintritt in die Schleife ausgeführt

test: wird vor jedem Schleifendurchlauf ausgewertet, Schleifendurchlauf findet nur statt, wenn test true zurückgibt

incr: Inkrementierung (Hochzählen) - wird nach jedem Schleifendurchlauf ausgeführt, meistens ein Hochzählen einer Zählvariablen (daher der Name incr/increment), kann aber auch herunterzählen oder etwas beliebiges anderes sein); dass diese Anweisung syntaktisch im Schleifenkopf steht, dient allein unserer Bequemlichkeit und der Übersichtlichkeit

Obige Schleife ist äquivalent zu:

init;
while (test) {
body;
incr;
};
Woher ich das weiß:Berufserfahrung – Software-Entwickler
rmnstr  25.09.2015, 17:24

Nach for und while-Schleifen muss man kein Semikolon setzen. In deinem Beispiel würde ein leerer Befehl nach der Schleife noch zusätzlich ausgeführt werden.

Die Schleifen sind auch nicht ganz äquivalent. Findet in der Initialisierung der for-Schleife eine Deklaration statt, so ist diese nur innerhalb der Schleife gültig, während im zweiten Beispiel die Gültigkeit auf den nächst-äußeren Klammerblock ausgeweitet wird. ;)

0
wolfgang1956  26.09.2015, 12:41
@rmnstr

In deinem Beispiel würde ein leerer Befehl nach der Schleife noch zusätzlich ausgeführt werden.

Moderne, aktuelle Compiler „sehen“ das. Da wird weder ein NOP noch ein leerer Befehl eingefügt!

1
rmnstr  27.09.2015, 01:35
@wolfgang1956

Stimmt zwar, trotzdem wird man sich im Arbeitsumfeld nicht beliebt machen, wenn man sowas anhängt.

Möglicherweise könnten die Checkstyle- oder PMD-Regeln des Unternehmens sogar den Code vom Kompilieren abhalten.

Außerdem gings ja um das Veranschaulichen von Schleifen. "Das ist zwar nicht ganz richtig, aber wird sowieso automatisch ausgebessert." ist kein guter Lernansatz ;)

0

for (Scon = 65; Scon <= 90; Scon++) {

  // Mach irgendwas mit Scon

}

Das sind aber absolute Grundlagen....

hutzen 
Fragesteller
 25.09.2015, 11:25

Naja, bin ja auch erst seit kurem dabei. Allerdings funktioniert mein Programm dann trotzdem nicht: http://prntscr.com/8k90ps

0
PWolff  25.09.2015, 11:43
@hutzen

Woher soll die Variable Scon wissen, dass sich irgendwas da draußen geändert hat, insbesondere in der Variablen Sbuf?

Wozu dient die if-Abfrage außerhalb der Schleife, bevor Scon auf einen Wert gesetzt worden ist? (Dass solche Sachen nicht vom Parser geprüft werden, ist einer der Gründe, warum ich C nicht für Anfänger empfehle.)

0
PWolff  25.09.2015, 11:52
@PWolff

Sehe gerade, dass "Java" in den Schlüsselworten steht. 

Ich weiß nicht, welche Java-Entwicklungsumgebungen überprüfen, ob eine Variable initialisiert wird, bevor ihr Wert ausgelesen wird; Visual Studio tut es jedenfalls für C#. (Für VB tut Visual Studio es nicht - warum zum ... auch immer.)

0
PWolff  25.09.2015, 11:26
0
hutzen 
Fragesteller
 25.09.2015, 11:49
@PWolff

Hmm, ich soll mit der if abfrage abfragen, ob das senderegister sbuf leer ist also damit beschreibbar ist, dann möchte ich das ganze ABC einmal im simulator als schrift angezeigt haben. Dafür soll ja Sbuf=65 sein, dann soll es gelöscht werden, damit es wieder beschreibbar ist, dann fragen ob es beschreibbar ist, dann 1 mehr also 66 damit das B, aber das funktioniert bisher noch nicht.

0
Mikkey  25.09.2015, 13:28
@hutzen

Da Senderegister bei einer seriellen Schnittstelle kann im Allgemeinen nicht gelesen werden (das Lesen dieser Adresse gibt den Inhalt des Empfangsregisters zurück).

Deshalb führe Dir erstmal die Grundlagen von Hardware-Programmierung zu Gemüte.

0

hi,

so eine Frage bedingt immer die Angabe der Sprache in der du das Ganze umsetzen willst.

Wenn es dir nur um den foprmalen aufbau einer Zählschleife geht

for (intitialwert; Endwert; schritttweite) {

Befehl

} Es gibt aber auch Sprachen da ist die schrittweite ein Befehl für sich

for (....) Scon;

hutzen 
Fragesteller
 25.09.2015, 11:21

Das geht leider nicht, wenn das meinst was ich denke, also die forschleife(...)

{

..

}

scon

0