wiederholender befehl?!



  • Hoiii @all

    ich bin neu hier und auch Anfänger in C programmieren, das heisst, ich hab erst angefangen und noch kaum Ahnung;

    meine erste Frage;
    gibts einen Befehl, der z.B eine Berechnung immer wiederholt, also es grundsätzlich nie ein Ende gibt

    int summe(void)
    {
    Eingabe der zahlen und
    irgendeine Berechnung...
    }

    main()
    {
    summe()

    jetzt will ich eben nicht 100mal summe() eingeben, sondern das es diese Berechnung automatisch wiederholt, also dann im Dosfenster, wenn das erste ergebnis angezeigt wird, es nochmal von vorn anfängt und eine wiederholte aufforderung zur eingabe der Zahlen, und dann wieder die Ausgabe und wieder von neuem..

    getchar();
    getchar();
    }

    ich hoffe ihr versteht meine frage 🙄

    wann weiss man eigentlich ob einmal oder zweimal getchar() eingegeben muss?



  • dafür gibt es schleifen:

    int i;
    for(i=0;i<100;++i)
    {
       summe();
    }
    

    dieser code führt summe() 100 mal aus
    eine anere mögichkeit in diesem fall ist folgendes

    do
    {
       summe();
       printf("noch einmal?")
    }while(getchar()=='j');
    

    das ist ziemlich essenziell das du das verstanden hast wenn du programmieren willst. ich nehme an das ist in einem buch ausfürhlich erklärt (wenn du kein buch hast würde ich mal eins besorgen)

    mfg japro



  • Danke erstmals, das erste hat funktioniert, wobei ich dies mal in meinem Buch nachchecken muss (habe: C-Programmierung lernen von André Willms)...

    und der letzte code macht nicht das was ich will, was hab ich falsch gemacht?

    #include <stdio.h>

    void text(void)
    {
    printf("hallo");
    }

    main()
    {
    do
    {
    text();
    printf("noch einmal?");
    }
    while(getchar()=='j');
    }

    dann noch paar andre Fragen..

    Anweisungen, denen kein Anweisungsblock folgt werden mit einem Semilikon abgeschlossen jää was meint man jetzt mit Anweisungsblock, Anweisung - ich weiss nie so recht wann ein Semilikon kommt oder nicht.... 🙄

    und dann noch zu Funktionsaufrufe:

    voidtext(void)

    jetzt steht das, dass erste void dafür steht von welchem Typ der Rückgabewert sein soll, in diesem Fall leer - doch das tschegg ich auch nicht - warum Rückgabewert!!?, im Prinzip hat doch das überhaupt keinen Einfluss!? z.B

    void summe(void)
    {
    int ergebnis, a, b;

    printf("a eingeben:");
    scanf("%i", &a);

    printf("b eingeben:");
    scanf("%i", &a);

    ergebnis = a+b

    printf("das ergebnis: %i", ergebnis);
    }

    jetzt ist logischerweise der schlusswert eine int Zahl, doch ob ich jetzt da vorne void oder int eingebe hat keinen Einfluss - schlussendlich hole ich doch im hauptprogramm mit summe() ganz einfach diese Berechnung, und ähm wenn ich jetz void summe(int x, int y) eingebe, dann müsste ich im Hauptprogramm fixe Zahlen eingeben für x und y oder?

    naja wäre nett wenn mir das einer irgendwie besser erklären könnte



  • hmm sag am besten noch dazu was nicht funktioniert anstatt einfach nur es geht nicht bitte. und verwende wenn mögich code tags!
    das hier geht jetzt bei mir:

    #include <stdio.h>
    
    void text(void)
    {
       printf("hallo");
    }
    
    main()
    {
       do
       {
          fflush(stdin);
          text();
          printf("noch einmal?");
       }
       while(getchar()=='j');
    }
    

    jetzt ist logischerweise der schlusswert eine int Zahl, doch ob ich jetzt da vorne void oder int eingebe hat keinen Einfluss - schlussendlich hole ich doch im hauptprogramm mit summe() ganz einfach diese Berechnung, und ähm wenn ich jetz void summe(int x, int y) eingebe, dann müsste ich im Hauptprogramm fixe Zahlen eingeben für x und y oder?

    sorry ich weiss nicht was du damit sagen willst 🙄 .

    void trallala()
    {
       printf("trallala");
    }
    

    diese funktin gibt nichts zurück sie macht halt nur etwas.

    int summe(int x, int y)
    {
       int ergebins = x+y;
       return ergebnis;
    }
    

    diese funktion gibt das ergebnis der rechung zurück.



  • ähm es gibt was zurück, aber für was brauch ich das, wo wird dies zurückgegeben - ins Hauptprogramm....oder wie?

    int ergebins = x+y;
    

    => ist da int überhaupt notwendig? warum muss es da auch stehen....

    tschuldige für die dämlichen fragen, aber ich will die codes schlussendlich irgendwie auch tscheggen oder die logik dahinter sehen 🙄



  • Original erstellt von nuclear:
    **ähm es gibt was zurück, aber für was brauch ich das, wo wird dies zurückgegeben - ins Hauptprogramm....oder wie?

    int ergebins = x+y;
    

    => ist da int überhaupt notwendig? warum muss es da auch stehen....
    **

    es stimmt schon die variable ergebnis ist überflüssig: mal ein beispiel zur benutzung:

    int summe(int x, int y)
    {
        return x+y;
    }
    int main() //ist mir bis jetzt noch nicht aufgefallen aber main hat rückbagetyp int!!!
    {
       printf("%d\n",summe(1,5)); 
    }
    

    [ Dieser Beitrag wurde am 26.10.2002 um 15:59 Uhr von japro editiert. ]



  • Dir fehlt anscheinend der Begriff des "Ausdrucks": Ein Ausdruck ist eine Konstruktion der Programmiersprache, die man auswerten kann. Dabei liefert er ein Ergebnis, und hat einen (Seiten-)Effekt.

    Ausdrücke sind z.b.:

    3
    

    Wertest du 3 aus, erhältst du den int-Wert 3 😉

    OK werden wir etwas komplizierter:

    3 + 4
    

    Ergebnis: int-Wert 7

    Mal was mit einer Variablen:

    int a = 42;
    // und jetzt der Ausdruck:
    a / 6
    

    Ergebnis der Auswertung: int-Wert 7

    Jetzt mal einen Ausdruck, der einen Effekt hat:

    getchar()
    

    Ergebnis: Läßt sich im Voraus nicht ablesen, aber es wird ein int-Wert sein, der einem eingelesenen Zeichen entspricht.
    Seiteneffekt: Der Lese-Zeiger wird um 1 weitergesetzt.

    Wo treten Ausdrücke auf? Bisher war's dir vielleicht nicht bewußt, aber überall wo du Konstanten oder Variablen einsetzt, stehen eigentlich Ausdrücke -- nur dass Konstanten und Variablen eben sehr simple Ausdrücke sind.

    Statt

    int ergebnis = a + b;
    printf("%d", ergebnis);
    

    könntest du auch gleich

    printf("%d", a+b);
    

    schreiben. Du ersetzt den Ausdruck ergebnis durch den gleichwertigen Ausdruck a+b.

    Was hat das ganze jetzt mit Funktionen und Rückgabewerten zu tun? Ein Funktionsaufruf ist ebenfalls ein Ausdruck. Ein Aufruf einer int-Funktion beispielsweise ist ein Ausdruck, der einen int-Wert ergibt. Machen wir mal das Beispiel von eben:

    // angenommen, wir haben eine Funktion summe, die 2 Zahlen addiert
    // diese Funktion soll den Ergebnistyp int haben
    printf("%d", summe(a, b));
    

    Diese Funktion gibts natürlich nicht, deshalb schreiben wir sie selbst -- hier wird auch der Sinn der return-Anweisung klar werden:

    int summe(int x, int y) {
      return x + y;
    }
    

    Wie du siehst, ist summe(a, b) genauso ein Ausdruck wie 3 oder a/6 Ausdrücke sind.

    Die einzige Sprache, in der es keine Ausdrücke gibt, ist meines Wissens Assembler. Es gibt auch Sprachen, die den Begriff der Anweisung an sich nicht kennen, und vorwiegend aus Ausdrücken mit oder auch hauptsächlich ohne Seiteneffekte bestehen (funktionale Sprachen).

    In C gibt es Anweisungen und Deklarationen, wobei an bestimmten Stellen Ausdrücke vorkommen dürfen (die Bedingung bei if ist beispielsweise ein Ausdruck). Funktionen können eher Ausdrucks-Charakter haben (wenn ihr Rückgabewert wesentlich ist -- Beispiel strcmp oder cos), oder eher Anweisungscharakter (wenn sie vom Typ void sind oder ihr Rückgabewert sekundär ist -- Beispiel strcpy oder fflush).



  • thanks, hat mir geholfen 🙂

    ne andre Frage, wie kann ich im C++Builder 5 einstellen, das der tabulator nicht gleich zu weit nach rechts vorrückt sondern weniger (also den Abstand von ca. 1cm bei einmal drücken und nicht gleich ca.2cm....- wegen der Darstellung...



  • ohps ist ok hat sich erledigt, mit dem Tab..


Anmelden zum Antworten