Rechnung einer for-Schleife



  • Ich habe gerade angefangen C zu lernen und bin gerade bei den Schleifen. Leider wird es in meinem Buch nicht besonders gut erklärt.
    Ich habe eine Frage zu den for-Schleifen:

    Wie Rechnet diese Anweisung, wenn maxeuro z.B. 2 ist:

    long euro, step, lower, upper, maxeuro;
    
    	for( lower=step=1; lower <= maxeuro; step *=10, lower = 2*step)
    		for( euro=lower, upper=step*10; euro <= upper && euro <= maxeuro; euro+=step)
    		  printf("%12ld %20.2f\n", euro , euro*kurs);
    

    Kann mir vllt. jemand kurz die Rechnung beschreiben?
    Danke schonmal.

    ps: Ist es normal, dass sich die Eingabaufforderung immer schließt, wenn alle Anweisungen durchgeführt sind? Ich muss immer getchar(); oder eine andere Anweisung dahinter setzten, obwohl davon nichts in meinem Buch steht.



  • Revenge57 schrieb:

    ps: Ist es normal, dass sich die Eingabaufforderung immer schließt, wenn alle Anweisungen durchgeführt sind? Ich muss immer getchar(); oder eine andere Anweisung dahinter setzten, obwohl davon nichts in meinem Buch steht.

    versuch das doch mal ohne debugger zu starten

    maxeuro = 2;
    lower = 1;
    step = 1;
    if(lower < maxeuro){//1 < 2
      euro = lower;//euro = 1
      upper = step*10;//upper = 10
      if(euro <= upper){//1 <= 10
        if(euro <= maxeuro){//1 <= 2
          //printf(...)
          euro = euro + step;//euro = 2;
        }
      }
      step = step * 10;//step = 10
      lower = step * 2;//lower = 20
      //jetzt gehts wieder von vorne los also bei
      if(lower < maxeuro){//20 < 2
      //ende
      }
    }
    

    hoffe da sind jetzt nicht zu viele fehler drin 😞

    lg lolo



  • Revenge57 schrieb:

    ps: Ist es normal, dass sich die Eingabaufforderung immer schließt, wenn alle Anweisungen durchgeführt sind? Ich muss immer getchar(); oder eine andere Anweisung dahinter setzten, obwohl davon nichts in meinem Buch steht.

    Du startest das Programm, es wird in einem neuen Fenster geöffnet, das Programm läuft, es ist fertig, es beendet sich, das Fenster wird wieder geschlossen. Alles richtig, alles wie man es erwarten sollte.



  • @noobLolo
    Wie funktioniert das denn mit dem debugger. Ich werwende MinGW als compiler.(läuft über eingabeaufforderung).

    Ich habe mal deinen code hier eingesetzt:

    Aber der Ausgangscode:

    #include <stdio.h>
    
    int main()
    {
    	long euro, step, lower, upper, maxeuro;
    	float kurs;
    
    	printf("\n\n * * * KURSTABELLE Euro - US$ * * *\n\n");
    
    	printf("\nBitte den Kurs Euro- US$ eingeben:	");
    	scanf("%f",&kurs);
    
    	printf("\n Bitte Obergrenze der Tabelle eingeben: ");
    	scanf("%ld",&maxeuro);
    
    	printf("\n\n%12s %20s\t\tKurs %.2f\n\n","Euro", "US-$", kurs);
    
    	for( lower=step=1; lower <= maxeuro; step *=10, lower = 2*step)
    		for( euro=lower, upper=step*10; euro <= upper && euro <= maxeuro; euro+=step)
    		  printf("%12ld %20.2f\n", euro , euro*kurs);
    fflush(stdin);
    getchar();
    	return 0;
    }
    

    hat bei mir nicht das gleiche Ergebniss wie mit deinem code:

    #include <stdio.h>
    
    int main()
    {
    	long euro, step, lower, upper, maxeuro;
    	float kurs;
    
    	printf("\n\n * * * KURSTABELLE Euro - US$ * * *\n\n");
    
    	printf("\nBitte den Kurs Euro- US$ eingeben:	");
    	scanf("%f",&kurs);
    
    	printf("\n Bitte Obergrenze der Tabelle eingeben: ");
    	scanf("%ld",&maxeuro);
    
    	printf("\n\n%12s %20s\t\tKurs %.2f\n\n","Euro", "US-$", kurs);
    
    lower = 1;
    step = 1;
    if(lower < maxeuro){//1 < 2
      euro = lower;//euro = 1
      upper = step*10;//upper = 10
      if(euro <= upper){//1 <= 10
        if(euro <= maxeuro){//1 <= 2
          //printf(...)
          euro = euro + step;//euro = 2;
        }
      }
      step = step * 10;//step = 10
      lower = step * 2;//lower = 20
      //jetzt gehts wieder von vorne los also bei
      if(lower < maxeuro){//20 < 2
      //ende
      }
    } 
    fflush(stdin);
    getchar();
    	return 0;
    }
    

    edit:
    @Janjan

    Also ist getchar(); ganz normal? ok, Danke. :p



  • Revenge57 schrieb:

    Wie funktioniert das denn mit dem debugger. Ich werwende MinGW als compiler.(läuft über eingabeaufforderung).

    sry, keine ahnung dachte du verwendest vc++ und da ist es soweit ich weiß so, wenn das programm mit dem grünen pfeil in der menü leiste gestartet wird schließt es sich sofort wieder.

    vc++ solution schrieb:

    The easiest way of avoiding the problem is to start your console application from Visual Studio without using debugging. To do this, select Start Without Debugging from the Debug menu (CTRL-F5). This time when the program ends execution, the window will remain open until you press any key on the keyboard.

    lg lolo



  • axo bevor ichs vergess, "fflush(stdin);" ist keine gute idee

    cplusplus: If it was open for reading and the last operation was an input operation, the behavior depends on the specific library implementation. In some implementations this causes the input buffer to be cleared, but this is not standard behavior.

    heißt soviel wie fflush(); verwendet man nicht auf streams von denen gelesen wurde, sondern nur auf streams auf die man geschrieben hat.

    lg lolo



  • Revenge57 schrieb:

    Wie funktioniert das denn mit dem debugger. Ich werwende MinGW als compiler.(läuft über eingabeaufforderung).

    Der GNU-Debugger heisst gdb. Vielleicht ist der bei mingw dabei, keine Ahnung.

    Revenge57 schrieb:

    Also ist getchar(); ganz normal?

    Siehe http://www.c-plusplus.net/forum/viewtopic-var-t-is-111042.html

    noobLolo schrieb:

    heißt soviel wie fflush(); verwendet man nicht auf streams von denen gelesen wurde, sondern nur auf streams auf die man geschrieben hat.

    Siehe http://www.c-plusplus.net/forum/viewtopic-var-t-is-39349.html
    🙂



  • Revenge57 schrieb:

    hat bei mir nicht das gleiche Ergebniss wie mit deinem code...

    lower = 1;
        step = 1;
        if(lower <= maxeuro){//1 < 2
          euro = lower;//euro = 1
          upper = step*10;//upper = 10
          if(euro <= upper){//1 <= 10
            if(euro <= maxeuro){//1 <= 2
            	printf("%12ld %20.2f\n", euro , euro*kurs);
              euro = euro + step;//euro = 2;
            }
          }
          if(euro <= upper){//2 <= 10
    	    if(euro <= maxeuro){//2 <= 2
    	   	  printf("%12ld %20.2f\n", euro , euro*kurs);
    	      euro = euro + step;//euro = 2;
    	    }
    	  }
          if(euro <= upper){//3 <= 10
          	if(euro <= maxeuro){//3 <= 2
          		//ende
          	}
          }
          step = step * 10;//step = 10
          lower = step * 2;//lower = 20
          //jetzt gehts wieder von vorne los also bei
          if(lower < maxeuro){//20 < 2
          //ende
          }
        }
    

    so evtl 😕

    lg lolo


Anmelden zum Antworten