![]() |
ok, erste for-schleife war ein blindgänger *schämundindieeckeverkriech* (obwohl ich mir einbilde, daß der C-Compiler auf der Micro-VAX in den späten 80ern genau dieses Verhalten gezeigt hat ... läßt sich jetzt natürlich besonders gut und leicht beweisen *g*), aber die 2. müßte stimmen, da dort von links nach rechts abgearbeitet wird, gelle ;)
lg Belgarath P.S.: bei der 2. Schleife wären dann natürlich die Ausgabe-Werte anders: 1 4 2 9 ... |
öhm ....
du .... hab gerad deinen vorschlag ausprobiert: hab folgende ausgabe (natürlich ohne dots): 2....0 3....1 4....4 5....9 .... 99.....9409 100....9604 101....9801 mh ... also ich mein, meine gefällt mir besser ;-) greetz artemisias |
Die zweite for-Schleife enthält einen typischen Anfängerfehler, sonic hat recht, daß das Array unterdimensioniert ist.
Das sind zwei Feststellungen: 1. ein Anfängerfehler ---> [++i], hochzählen der Variable i um 1 vor dem Verwenden von i 2. INSOFERN: Array unterdimensioniert Punkt 2 soll lediglich ausdrücken, daß, wer so "programmiert", sich nicht wundern braucht. Fehler: for(i=0; i<100; printf("%d\t%d\n", i, iwerte[++i])); Korrekt: for(i=0; i<100; i++) printf("%d\t%d\n", i, iwerte[i]); Eine Schleife besteht nicht zu unrecht aus Initialisierungsteil, Abbruchbedingung und Increment/Decrement. Wer eine SCHLEIFENVARIABLE mitten in einer Schleife hochzählt, erzeugt damit einen Mischmasch aus Durchlauf n und Durchlauf n + 1. |
ok, ich werd daheim meinen kobel damit füttern, daß ich nicht blind herumtasten muß ... allerdings: wenn i mit 0 initialisiert wird, dürfte in der 2. Schleife die Ausgabe nicht mit
2 ... 0 beginnen ... außer der Compiler arbeitet alles von rechts ab, was aber imho nicht korrekt wäre, da hier ja keine Zuweisung erfolgt. Wie gesagt, ich werde es daheim ausprobieren ... *ascheaufmeinhaupt* lg Belgarath |
mh .... mag ja gar nix mehr schreiben ... sonst kommst heut nimma mehr aus der *schämeecke ;-)
auch deine zweite forschleife hat nen leichten bug ...weil hier nämlich von rechts nach links ausgewertet wird. korrekt müsste es heißen (und ist damit zugegebenermaßen einfacher als meine): for ( i = 0; i < 100; printf( "%d\t%d\n", i, iwerte[i++] ) ) und dann funzt es auch mit der schleife *smile greetz artemisia |
@kikakater:
wenn wir schon um des kaisers neue kleider streiten wollen *gg*: wenn ich 100 werte erzeugen und in einem array ablegen will und mir dazu ein array mit 100 elementen anlege, habe ich genau richtig dimensioniert! wenn ich dann allerdings mit falschen indizes arbeite, fliege ich irgendwann auf die schnauze ... lg Belgarath |
allerdings gebe ich dir mit der (korrekten) trennung in initialisierung, abbruchbedingung, incr/decr _und_ eigentlich zu wiederholenden statement-teil recht. aber c läßt nun mal so einige schweinereien zu *fg*
lg Belgarath |
@kikakater
mh ... es ist mir im prinzip schnurz, was die lehrbücher erzählen ... ich bin im mom am testen, was frau in forschleifen alles anstellen kann und in welcher reihenfolge der compiler das auswertet. .... und wie du siehst (oder vielleicht auch nicht ;-) ) gibt es immer interessante seiteneffekte *ggg c ist eben doch der geländewagen .... greetz artemisias btw: ich finde, es gibt nichts faderes, als sich immer nur an vorgaben zu orientieren ... wo bleibt die progressivität? |
ist eine gute lesbarkeit und leichte verständlichkeit auch nach mehr als 1 Woche Abstand zum eigenen Machwerk nicht progressiv *scnr*? Aber das Compilerverhalten (von rechts auflösen) ist schon recht heftig, und bei solchen Konstruktionen ist das nicht mehr trivial lesbar, selbst wenn man's weiß!
lg Belgarath |
for ( i = 0; i < 100; printf( "%d\t%d\n", i, iwerte[i++] ) )
Was soll das ? .) Da fehlt das Semikolon am Schluß, Nummer 1. .) Zweitens: i wird mit 0 ausgegeben, richtig wäre i + 1, iwerte[i] und .) Drittens: i sollte und MUSS im Increment/Decrement Teil verändert werden, alles andere als das, ist ein Programmierfehler, es ist so, Ende der Diskussion, nichts für ungut. for(i = 0; i < 100; i++) printf("%d\t%d\n", i + 1, iwerte[i]); Bis zum nächsten Lapsus, linken mit der Mathematik Bibliothek ist auch klar :) |
Alle Zeitangaben in WEZ +2. Es ist jetzt 07:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag