For-Schleife Befehl zwischen dem Hochzählen?
Hallo,
ich möchte eine Zählschleife machen, allerdings zwischen dem zählen immer ein Befehl ausführen:
Sbuf=65 Scon=Scon&(~2); Sbuf=Sbuf+1; Scon=Scon&(~2);
So soll es aussehen also Startwert 65 und dann den Scon Befehl dann 1 hochzählen usw. wie realisiere ich so etwas?
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;
};
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!
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 ;)
for (Scon = 65; Scon <= 90; Scon++) {
// Mach irgendwas mit Scon
}
Das sind aber absolute Grundlagen....
Das sind aber absolute Grundlagen....
Siehe https://www.gutefrage.net/frage/c-programmierung-bitweise-operatoren?foundIn=my_stream
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.
Naja, bin ja auch erst seit kurem dabei. Allerdings funktioniert mein Programm dann trotzdem nicht: http://prntscr.com/8k90ps
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.)
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.)
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;
Das geht leider nicht, wenn das meinst was ich denke, also die forschleife(...)
{
..
}
scon
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. ;)