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)
    Next

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


Anmelden zum Antworten