return main( ) funktioniert net ganz

hatata

Grünschnabel
wahrscheinlich kann man alles kürzer fassen.. zu dumm noch dafür
naja egal
am ende das return main (); funktioniert nicht :/
Ausgabe ist am ende..

C:
#include <stdio.h>
#include <math.h>

int menue();

int main() {

    printf("       -Taschenrehner-\n\n");

    char Operator;
    double Operand1, Operand2;

    printf("Operator: ");
    scanf("%c", &Operator);

    printf("Operand: ");
    scanf("%lf", &Operand1);

    printf("Operand: ");
    scanf("%lf", &Operand2);

    if (Operator == '+') {
        printf("\n%.2lf + %.2lf = %.2lf \n\n", Operand1, Operand2, Operand1 + Operand2);
        return menue();
    } else if (Operator == '-') {
        printf("\n%.2lf - %.3lf = %.2lf \n\n", Operand1, Operand2, Operand1 - Operand2);
        return menue();
    }else if (Operator == '*') {
        printf("\n%.2lf * %.2lf = %.2lf \n\n", Operand1, Operand2, Operand1 * Operand2);
        return menue();
    } else if (Operator == '/') {
        if (Operand1 == 0 || Operand2 == 0){
            printf("Fehler: Division durch NUll!\n\n");
            return menue();
        }
        else {
            printf("\n%.2lf / %.2lf = %.2lf \n\n", Operand1, Operand2, Operand1 / Operand2);
            return menue();
        }
    } else if (Operator == '#') {
        unsigned long Operand3, Operand4;
        Operand1 = Operand3;
        Operand2 = Operand4;
        if (Operand3 == Operand1|| Operand4 == Operand2) {
            printf("Fehler: negative Basen sind hier nicht erlaubt!\n\n");
            return menue();
        } else {
            printf("\n%.2lf # %.2lf = %.2lf \n\n", Operand1, Operand2, pow(Operand1, Operand2));
            return menue();
        }
    }
    return 0;
}


int menue (int eingabe){

    printf("Möchten Sie weiter rechnen?\n1-Ja 2-Nein\n");
    scanf("%d", &eingabe);
    printf("\n");

    if (eingabe == 2) {
        printf("BIS SPÄTER :)");

    } else if (eingabe == 1) {
        return main();
    }
    return 0;
}

AUSGABE

C:
       -Taschenrehner-

Operator: +
Operand: 34
Operand: 2

34.00 + 2.00 = 36.00

Möchten Sie weiter rechnen?
1-Ja 2-Nein
1

       -Taschenrehner-

Operator: Operand:

den Operator kann ich gar net angeben nur die 2 Operanden danach geht nichts mehr.
 

Zvoni

Erfahrenes Mitglied
Die Prozedur "menue" ist überflüssig (und demzufolge auch die ganzen "return menue();")
Was du brauchst in eine Do-While-Schleife, welches den ganzen Code umschliesst.
C While Loop
C:
#include <stdio.h>
#include <math.h>

/*int menue(); //Braucht kein Mensch */

int main() {
int eingabe;

  Do {
    printf("       -Taschenrehner-\n\n");

    char Operator;
    double Operand1, Operand2;

    printf("Operator: ");
    scanf("%c", &Operator);

    printf("Operand: ");
    scanf("%lf", &Operand1);

    printf("Operand: ");
    scanf("%lf", &Operand2);

    if (Operator == '+') {
        printf("\n%.2lf + %.2lf = %.2lf \n\n", Operand1, Operand2, Operand1 + Operand2);
        /*return menue(); //Überflüssig */
    } else if (Operator == '-') {
        printf("\n%.2lf - %.3lf = %.2lf \n\n", Operand1, Operand2, Operand1 - Operand2);
        /*return menue(); //Überflüssig */
    }else if (Operator == '*') {
        printf("\n%.2lf * %.2lf = %.2lf \n\n", Operand1, Operand2, Operand1 * Operand2);
        /*return menue(); //Überflüssig */
    } else if (Operator == '/') {
        if (Operand1 == 0 || Operand2 == 0){
            printf("Fehler: Division durch NUll!\n\n");
             /*return menue(); //Überflüssig */
        }
        else {
            printf("\n%.2lf / %.2lf = %.2lf \n\n", Operand1, Operand2, Operand1 / Operand2);
            /*return menue(); //Überflüssig */
        }
    } else if (Operator == '#') {
        unsigned long Operand3, Operand4;
        Operand1 = Operand3;
        Operand2 = Operand4;
        if (Operand3 == Operand1|| Operand4 == Operand2) {
            printf("Fehler: negative Basen sind hier nicht erlaubt!\n\n");
            /*return menue(); //Überflüssig */
        } else {
            printf("\n%.2lf # %.2lf = %.2lf \n\n", Operand1, Operand2, pow(Operand1, Operand2));
            /*return menue(); //Überflüssig */
        }
    }
    printf("Möchten Sie weiter rechnen?\n1-Ja 2-Nein\n");
    scanf("%d", &eingabe);
    printf("\n");

 } While (eingabe==1);
    printf("BIS SPÄTER :)");
    return 0;
}
P.S.: Ich hab noch nie im Leben auch nur eine einzige Zeile in C programmiert.....

EDIT: Und "Taschenrehner" wird mit 'ch' geschrieben --> Taschenrechner"
 
Zuletzt bearbeitet:

hatata

Grünschnabel
Die Prozedur "menue" ist überflüssig (und demzufolge auch die ganzen "return menue();")
Was du brauchst in eine Do-While-Schleife, welches den ganzen Code umschliesst.
C While Loop
C:
#include <stdio.h>
#include <math.h>

/*int menue(); //Braucht kein Mensch */

int main() {
int eingabe;

  Do {
    printf("       -Taschenrehner-\n\n");

    char Operator;
    double Operand1, Operand2;

    printf("Operator: ");
    scanf("%c", &Operator);

    printf("Operand: ");
    scanf("%lf", &Operand1);

    printf("Operand: ");
    scanf("%lf", &Operand2);

    if (Operator == '+') {
        printf("\n%.2lf + %.2lf = %.2lf \n\n", Operand1, Operand2, Operand1 + Operand2);
        /*return menue(); //Überflüssig */
    } else if (Operator == '-') {
        printf("\n%.2lf - %.3lf = %.2lf \n\n", Operand1, Operand2, Operand1 - Operand2);
        /*return menue(); //Überflüssig */
    }else if (Operator == '*') {
        printf("\n%.2lf * %.2lf = %.2lf \n\n", Operand1, Operand2, Operand1 * Operand2);
        /*return menue(); //Überflüssig */
    } else if (Operator == '/') {
        if (Operand1 == 0 || Operand2 == 0){
            printf("Fehler: Division durch NUll!\n\n");
             /*return menue(); //Überflüssig */
        }
        else {
            printf("\n%.2lf / %.2lf = %.2lf \n\n", Operand1, Operand2, Operand1 / Operand2);
            /*return menue(); //Überflüssig */
        }
    } else if (Operator == '#') {
        unsigned long Operand3, Operand4;
        Operand1 = Operand3;
        Operand2 = Operand4;
        if (Operand3 == Operand1|| Operand4 == Operand2) {
            printf("Fehler: negative Basen sind hier nicht erlaubt!\n\n");
            /*return menue(); //Überflüssig */
        } else {
            printf("\n%.2lf # %.2lf = %.2lf \n\n", Operand1, Operand2, pow(Operand1, Operand2));
            /*return menue(); //Überflüssig */
        }
    }
    printf("Möchten Sie weiter rechnen?\n1-Ja 2-Nein\n");
    scanf("%d", &eingabe);
    printf("\n");

 } While (eingabe==1);
    printf("BIS SPÄTER :)");
    return 0;
}
P.S.: Ich hab noch nie im Leben auch nur eine einzige Zeile in C programmiert.....

EDIT: Und "Taschenrehner" wird mit 'ch' geschrieben --> Taschenrechner
danke:)))
 

hatata

Grünschnabel
Die Prozedur "menue" ist überflüssig (und demzufolge auch die ganzen "return menue();")
Was du brauchst in eine Do-While-Schleife, welches den ganzen Code umschliesst.
C While Loop
C:
#include <stdio.h>
#include <math.h>

/*int menue(); //Braucht kein Mensch */

int main() {
int eingabe;

  Do {
    printf("       -Taschenrehner-\n\n");

    char Operator;
    double Operand1, Operand2;

    printf("Operator: ");
    scanf("%c", &Operator);

    printf("Operand: ");
    scanf("%lf", &Operand1);

    printf("Operand: ");
    scanf("%lf", &Operand2);

    if (Operator == '+') {
        printf("\n%.2lf + %.2lf = %.2lf \n\n", Operand1, Operand2, Operand1 + Operand2);
        /*return menue(); //Überflüssig */
    } else if (Operator == '-') {
        printf("\n%.2lf - %.3lf = %.2lf \n\n", Operand1, Operand2, Operand1 - Operand2);
        /*return menue(); //Überflüssig */
    }else if (Operator == '*') {
        printf("\n%.2lf * %.2lf = %.2lf \n\n", Operand1, Operand2, Operand1 * Operand2);
        /*return menue(); //Überflüssig */
    } else if (Operator == '/') {
        if (Operand1 == 0 || Operand2 == 0){
            printf("Fehler: Division durch NUll!\n\n");
             /*return menue(); //Überflüssig */
        }
        else {
            printf("\n%.2lf / %.2lf = %.2lf \n\n", Operand1, Operand2, Operand1 / Operand2);
            /*return menue(); //Überflüssig */
        }
    } else if (Operator == '#') {
        unsigned long Operand3, Operand4;
        Operand1 = Operand3;
        Operand2 = Operand4;
        if (Operand3 == Operand1|| Operand4 == Operand2) {
            printf("Fehler: negative Basen sind hier nicht erlaubt!\n\n");
            /*return menue(); //Überflüssig */
        } else {
            printf("\n%.2lf # %.2lf = %.2lf \n\n", Operand1, Operand2, pow(Operand1, Operand2));
            /*return menue(); //Überflüssig */
        }
    }
    printf("Möchten Sie weiter rechnen?\n1-Ja 2-Nein\n");
    scanf("%d", &eingabe);
    printf("\n");

 } While (eingabe==1);
    printf("BIS SPÄTER :)");
    return 0;
}
P.S.: Ich hab noch nie im Leben auch nur eine einzige Zeile in C programmiert.....

EDIT: Und "Taschenrehner" wird mit 'ch' geschrieben --> Taschenrechner"
Kannst du mir erklären, wie eine Do While Schleife funktioniert? ^^
 

Zvoni

Erfahrenes Mitglied
Kannst du mir erklären, wie eine Do While Schleife funktioniert? ^^
Sieh auch Antwort von Scatello.

Aber mal ganz vereinfacht:
C:
/*1. Variante */
Do {
            /*Viele Anweisungen hier*/
} While (EineBedingung)

/*2. Variante */
While (EineBedingung)
{
            /*Viele Anweisungen hier*/
}
Prinzipiell: Beide Varianten führen die "inneren" Anweisungen so lange aus, solange "EineBedingung" WAHR ist. Hört also auf, sobald "EineBedingung" FALSCH ist.
Es gibt aber einen ganz dicken Unterschied:
Eine Do-While-Schleife (1. Variante oben) lauft MINDESTENS einmal durch die Anweisungen, während eine While-Schleife (2. Variante oben) auch KEIN MAL durch die Anweisungen laufen KANN!

Ich hoffe es war verständlich.
Welche Variante du verwendest, hängt vom Anwendungsfall ab.
Im Beispiel Taschenrechner willst du ja, dass mindestens einmal die Anweisungen ausgeführt werden.
Ein Beispiel für die zweite Variante wäre z.B. eine Abfrage auf eine Datenbank, und in einer Schleife soll das Ergebnis ausgegeben werden. So eine Abfrage kann nämlich das Resultat "Nix gefunden" liefern.
Und wenn "nix gefunden", dann hast du auch nichts zum ausgeben, welches die "inneren" Anweisungen machen sollen

EDIT: Prinzipieller Rat von mir: Du scheinst Anfänger zu sein was programmieren an sich betrifft (also keinerlei Vorkenntnisse in einer anderen Programmier-Sprache).
Lern englisch! Und zwar schleunigst.
Die besten Seiten im Netz zum Programmieren (und zwar egal welche Sprache), sind auf englisch.

Mal davon abgesehen, dass bis auf ganz, ganz wenige Ausnahmen alle sogenannten Keywords einer jeden Programmiersprache, englische "Begriffe" sind
Im Beispiel: "Do - While" (Englisch) --> "Tue - solange" (Deutsch)
Jetzt kommt noch "erschwerend" hinzu, dass viele englische Begriffe mehrere Bedeutungen haben können.

Beispiel gefällig?
Die zwei Varianten von oben ins Deutsche übersetzt, und zwar im Sinne der Semantik die sie ausdrücken sollen
1. Variante
Tue {
Anweisungen
} Solange (BedingungIstWahr)

2. Variante
Während (BedingungIstWahr {
Anweisungen
}
 
Zuletzt bearbeitet:

hatata

Grünschnabel
Sieh auch Antwort von Scatello.

Aber mal ganz vereinfacht:
C:
/*1. Variante */
Do {
            /*Viele Anweisungen hier*/
} While (EineBedingung)

/*2. Variante */
While (EineBedingung)
{
            /*Viele Anweisungen hier*/
}
Prinzipiell: Beide Varianten führen die "inneren" Anweisungen so lange aus, solange "EineBedingung" WAHR ist. Hört also auf, sobald "EineBedingung" FALSCH ist.
Es gibt aber einen ganz dicken Unterschied:
Eine Do-While-Schleife (1. Variante oben) lauft MINDESTENS einmal durch die Anweisungen, während eine While-Schleife (2. Variante oben) auch KEIN MAL durch die Anweisungen laufen KANN!

Ich hoffe es war verständlich.
Welche Variante du verwendest, hängt vom Anwendungsfall ab.
Im Beispiel Taschenrechner willst du ja, dass mindestens einmal die Anweisungen ausgeführt werden.
Ein Beispiel für die zweite Variante wäre z.B. eine Abfrage auf eine Datenbank, und in einer Schleife soll das Ergebnis ausgegeben werden. So eine Abfrage kann nämlich das Resultat "Nix gefunden" liefern.
Und wenn "nix gefunden", dann hast du auch nichts zum ausgeben, welches die "inneren" Anweisungen machen sollen

EDIT: Prinzipieller Rat von mir: Du scheinst Anfänger zu sein was programmieren an sich betrifft (also keinerlei Vorkenntnisse in einer anderen Programmier-Sprache).
Lern englisch! Und zwar schleunigst.
Die besten Seiten im Netz zum Programmieren (und zwar egal welche Sprache), sind auf englisch.

Mal davon abgesehen, dass bis auf ganz, ganz wenige Ausnahmen alle sogenannten Keywords einer jeden Programmiersprache, englische "Begriffe" sind
Im Beispiel: "Do - While" (Englisch) --> "Tue - solange" (Deutsch)
Jetzt kommt noch "erschwerend" hinzu, dass viele englische Begriffe mehrere Bedeutungen haben können.

Beispiel gefällig?
Die zwei Varianten von oben ins Deutsche übersetzt, und zwar im Sinne der Semantik die sie ausdrücken sollen
1. Variante
Tue {
Anweisungen
} Solange (BedingungIstWahr)

2. Variante
Während (BedingungIstWahr {
Anweisungen
}
OKEY krass, Danke für die Antwort. Hab schon auf yt gemerkt.. alles auf Englisch:)
Programmiere erst seit paar Wochen ^^ hab neu mit meinem Studium angefangen und lange gedrückt die Aufgaben zu machen, weil es alleine schon recht schwer ist, aber die Antworten hier helfen mir sehr. Danke dir!