Verständniss Frage
-
Hallo Community,
ich habe gerade eine Schleife Iteration geschrieben die 1+2+3+...+n rechnet. Dabei ist mir etwas aufgefallen:#include<stdio.h> #include<conio.h> void main() { int i, n, a=0; printf("Bitte geben Sie n ein:"); scanf("%d",&n); for (i=1;i<=n;i++) { a=a+i; } printf("%d\n",a); }
wenn ich bei der Bedingung in der for schleife i kleiner gleich n benutze funktioniert alles einwandfrei.
Wenn ich allerdings die Bedingung in der for schleife auf i == n setze durchläuft das Programm die schleife überhaupt nicht und gibt 0 aus.
Wieso ist das so? n wird ja vorher von mir eingegeben. Also müsste wenn ich für n = 5 eingebe, in der schleifen Bedingung i == 5 stehen, da i als start wert 1 besitzt müsste er doch die Schleife durchlaufen. Wieso tut er das nicht?#include<stdio.h> #include<conio.h> void main() { int i, n, a=0; printf("Bitte geben Sie n ein:"); scanf("%d",&n); for (i=1;i==n;i++) //wieso funktioniert i istgleich n nicht? { a=a+i; } printf("%d\n",a); }
-
Die Schleife wird nur durchlaufen wenn der mittlere Teil TRUE, also gültig ist.
Und 1 == 5 ist sicher nicht richtig, also ungültig -> Schleife wird ohne Durchlauf abgebrochen.
-
Beim ersten Durchlauf ist i == 1, und deshalb gilt nicht unbedingt i == n. Die for-Schleife macht nur weiter, solange die Bedingung erfüllt ist.
Richtig wäre genau das Gegenteil: i != n (allerdings bricht das 1 Runde früher ab als i <= n)
Warum häufen sich heute allgemein solche Denkfehler?
-
Ok, vielen danke für die antwort.
Ich steige halt gerade von Vb.net auf Ansi C um.
In vb.net sieht das ganze anders aus:For i = 1 To n Step +1
a = a + (i * i)
NextDeshalb ist das ganze etwas ungewohnt. Also bitte nicht so gehässig sein wenn jemand etwas nicht auf anhieb versteht, jeder hat mal klein angefangen.
-
Umstieg vb auf C heißt "Hirn an". Den Fehler hattest Du ja selbst schon gefunden ...