Kleines Rechenprogramm (+,-,*,\) funtkioniert nicht :(



  • Nabend,

    bin noch ganz neu in der Programmierung und schreibe meine ersten Programme. Aber auch meine "ersten" Fehler^^
    Mein Code:

    #include <stdio.h>
    
    int Zahl1;
    int Zahl2;
    int Zahl3;
    int Resultat;
    int Auswahl;
    char Auswahl2;
    
    int main()
    {
        printf("Dieses Programm kann PLUS, MINUS, MAL und VERTEILT rechnen!\n\n");
        sleep(2500);
        printf("Fuer PLUS geben Sie Bitte 1 ein, MINUS die 2, MAL die 3, fuer VERTEILT die 4:");
        scanf("%d", &Auswahl);
    
    if (Auswahl == 1) {
                printf("\n\nBitte geben Sie nun ihre erste Zahl ein: ");
                scanf("%d", &Zahl1);
                printf("\nBitte geben Sie nun ihre zweite Zahl ein: ");
                scanf("%d", &Zahl2);
                }
                printf("\nMoechten Sie eine weitere (letzte) Zahl eingeben? J/N: ");
                scanf("%s", &Auswahl2);
         if (Auswahl2 == 'J' | 'j') {
                printf("\nBitte geben Sie nun ihre dritte und letzte Zahl ein: "); 
                scanf("%d", &Zahl3);     
                Resultat = (Zahl1 + Zahl2 + Zahl3);
                printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat);
                }
         else if (Auswahl2 == 'N' | 'n') {
                Resultat = (Zahl1 + Zahl2);
                printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat);
    }
    
    else if (Auswahl == 2) {
                printf("\n\nBitte geben Sie nun ihre erste Zahl ein: "); 
                scanf("%d", &Zahl1);
                printf("\nBitte geben Sie nun ihre zweite Zahl ein: ");
                scanf("%d", &Zahl2);
                Resultat = (Zahl1 - Zahl2);
                printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat);
    }
    
    else if (Auswahl == 3) {
                printf("\n\nBitte geben Sie nun ihre erste Zahl ein: ");
                scanf("%d", &Zahl1);
                printf("\nBitte geben Sie nun ihre zweite Zahl ein: ");
                scanf("%d", &Zahl2);
                printf("\nMoechten Sie eine weitere (letzte) Zahl eingeben? J/N: ");
                scanf("%s", &Auswahl2);
                }
         if (Auswahl2 == 'J' | 'j') {
                printf("\nBitte geben Sie nun ihre dritte und letzte Zahl ein: "); 
                scanf("%d", &Zahl3);     
                Resultat = (Zahl1 * Zahl2 * Zahl3);
                printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat);
                }
         else if (Auswahl2 == 'N' | 'n') {
                Resultat = (Zahl1 * Zahl2);
                printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat);
    }
    
    else if (Auswahl == 4) {
                printf("\n\nBitte geben Sie nun ihre erste Zahl ein: "); 
                scanf("%d", &Zahl1);
                printf("\nBitte geben Sie nun ihre zweite Zahl ein: ");
                scanf("%d", &Zahl2);
                Resultat = (Zahl1 / Zahl2);
                printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat);
    }
        system("PAUSE");
        return 0;    
    }
    

    Ich versteh nich was falsch ist :((
    Hoffe ihr könnt mir helfen.. 🙄

    MfG eMi



  • Sage bitte, was nicht funktioniert. Compilierbar ist das Programm aber? Gehe nicht davon aus, dass hier jeder deinen Code durch den Compiler schickt.

    fürs erste (Anfängerfehler) :
    Du machst die J/N Abfragen falsch, besser z.B.

    char ok[2];
    

    besser:

    fgets( ok, 2, stdin );
    if( *ok=='J' || *ok=='j' ) {
    ...
    else if ( *ok=='N' || *ok=='n' ) {
    

    statt:

    scanf("%s", &Auswahl2);
         if (Auswahl2 == 'J' | 'j') {
    ...
         else if (Auswahl2 == 'N' | 'n') {
    


  • thx, habs grad mal verändert

    ->es sind verschiedene Fehler, je nach dem was man am Anfang auswählt (1,2,3,4 -> Für die verschiedenen Rechenarten)

    Das Programm Ist kompilierbar,

    Also:

    #include <stdio.h>
    
    int Zahl1;
    int Zahl2;
    int Zahl3;
    int Resultat;
    int Auswahl;
    char ok[2];
    
    int main()
    {
        printf("Dieses Programm kann PLUS, MINUS, MAL und VERTEILT rechnen!\n\n");
        sleep(2500);
        printf("Fuer PLUS geben Sie Bitte 1 ein, MINUS die 2, MAL die 3, fuer VERTEILT die 4:");
        scanf("%d", &Auswahl);
    

    Bis hier ist alle noch top 🙂

    Danach wähle ich die Zahl 1 (für +)

    dann kommt "GEBEN SIE BITTE IHRE ERSTE ZAHL EIN" -> Geb ich 5 ein->ENTER.
    dann kommt "GEBEN SIE BITTE IHRE ZWEITE ZAHL EIN" -> Geb ich 5 ein->ENTER.

    dann kommt 2! Mal nacheinander!> "Moechten Sie eine weitere (letzte) Zahl eingeben? J/N:"
    DAnn geb ich J ein->ENTER

    Danach kommt das richtige (Geben sie ihre letzte und dritte Zahl ein)->Geb ich 5 ein->ENTER

    Aber Resultat ist 125! 😞 Was ist da falsch?

    Hoffe jemand kann es kurz kompilieren und kurz gucken (nehme an es istn klammerfehler oder so)

    MfG 🙄

    (Der überarbeitete CODE):

    #include <stdio.h>
    
    int Zahl1;
    int Zahl2;
    int Zahl3;
    int Resultat;
    int Auswahl;
    char ok[2];
    
    int main()
    {
        printf("Dieses Programm kann PLUS, MINUS, MAL und VERTEILT rechnen!\n\n");
        sleep(2500);
        printf("Fuer PLUS geben Sie Bitte 1 ein, MINUS die 2, MAL die 3, fuer VERTEILT die 4:");
        scanf("%d", &Auswahl);
    
    if (Auswahl == 1) {
                printf("\n\nBitte geben Sie nun ihre erste Zahl ein: ");
                scanf("%d", &Zahl1);
                printf("\nBitte geben Sie nun ihre zweite Zahl ein: ");
                scanf("%d", &Zahl2);
                }
                printf("\nMoechten Sie eine weitere (letzte) Zahl eingeben? J/N: ");
                fgets( ok, 2, stdin );
         if( *ok=='J' || *ok=='j' ) {
                printf("\nBitte geben Sie nun ihre dritte und letzte Zahl ein: "); 
                scanf("%d", &Zahl3);     
                Resultat = (Zahl1 + Zahl2 + Zahl3);
                printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat);
                }
         else if ( *ok=='N' || *ok=='n' ) {
                Resultat = (Zahl1 + Zahl2);
                printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat);
    }
    
    else if (Auswahl == 2) {
                printf("\n\nBitte geben Sie nun ihre erste Zahl ein: "); 
                scanf("%d", &Zahl1);
                printf("\nBitte geben Sie nun ihre zweite Zahl ein: ");
                scanf("%d", &Zahl2);
                Resultat = (Zahl1 - Zahl2);
                printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat);
    }
    
    else if (Auswahl == 3) {
                printf("\n\nBitte geben Sie nun ihre erste Zahl ein: ");
                scanf("%d", &Zahl1);
                printf("\nBitte geben Sie nun ihre zweite Zahl ein: ");
                scanf("%d", &Zahl2);
                }
                printf("\nMoechten Sie eine weitere (letzte) Zahl eingeben? J/N: ");
                fgets( ok, 2, stdin );
         if ( *ok=='J' || *ok=='j' ) {
                printf("\nBitte geben Sie nun ihre dritte und letzte Zahl ein: "); 
                scanf("%d", &Zahl3);     
                Resultat = (Zahl1 * Zahl2 * Zahl3);
                printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat);
                }
         else if ( *ok=='N' || *ok=='n' ) {
                Resultat = (Zahl1 * Zahl2);
                printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat);
    }
    
    else if (Auswahl == 4) {
                printf("\n\nBitte geben Sie nun ihre erste Zahl ein: "); 
                scanf("%d", &Zahl1);
                printf("\nBitte geben Sie nun ihre zweite Zahl ein: ");
                scanf("%d", &Zahl2);
                Resultat = (Zahl1 / Zahl2);
                printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat);
    }
        system("PAUSE");
        return 0;    
    }
    


  • Deine Block-Klammerung ist falsch!

    Ab Zeile 18:

    if (Auswahl == 1) {
                printf("\n\nBitte geben Sie nun ihre erste Zahl ein: ");
                scanf("%d", &Zahl1);
                printf("\nBitte geben Sie nun ihre zweite Zahl ein: ");
                scanf("%d", &Zahl2);
                }  // DIESE KLAMMER schliesst das if ab
                printf("\nMoechten Sie eine weitere (letzte) Zahl eingeben? J/N: ");
                scanf("%s", &Auswahl2);
    

    In dem Auszug wird

    printf("\nMoechten Sie eine weitere (letzte) Zahl eingeben? J/N: ");
    

    immer ausgeführt.

    Tipp zur Fehlersuche: Schreibe doch in den Ausgabetext noch die Auswahl mit rein, dann kannst du sehen wo das Programm gerade ist.
    Z.B. hier das "1>" :

    if (Auswahl == 1) {
                printf("\n\n1> Bitte geben Sie nun ihre erste Zahl ein: ");
                scanf("%d", &Zahl1);
                printf("\n1> Bitte geben Sie nun ihre zweite Zahl ein: ");
                scanf("%d", &Zahl2);
                }  // DIESE KLAMMER schliesst das if ab
                printf("\n1> Moechten Sie eine weitere (letzte) Zahl eingeben? J/N: ");
                scanf("%s", &Auswahl2);
    


  • Das Problem ist wie bei allen Eingaben mit scanf, dass das abschließende '\n' auf nächste Eingaben durchschlägt.

    char tmp[80];
    ...
    

    ersetze mal ALLE Eingaben der Form

    scanf("%d", &XXX);
    

    durch

    fgets(tmp,80,stdin);sscanf(tmp,"%d", &XXX);
    


  • sach mal wieso hörst du eingentlich nicht wenn jmd. sagt nicht immer alles in eine zeile 😕



  • Wutz schrieb:

    fgets(tmp,80,stdin);sscanf(tmp,"%d", &XXX);
    

    zufällig ists auch noch falsch!



  • anstatt deinem code, versucht mal diesen LEICHT abgeänderten

    #include <stdio.h> 
    
    int Zahl1; 
    int Zahl2; 
    int Zahl3; 
    int Resultat; 
    int Auswahl; 
    char Auswahl2; 
    
    int main() 
    { 
        printf("Dieses Programm kann PLUS, MINUS, MAL und VERTEILT rechnen!\n\n"); 
        sleep(2500); 
        printf("Fuer PLUS geben Sie Bitte 1 ein, MINUS die 2, MAL die 3, fuer VERTEILT die 4:"); 
        scanf("%d", &Auswahl); 
    
    if (Auswahl == 1) { 
                printf("\n\nBitte geben Sie nun ihre erste Zahl ein: "); 
                scanf("%d", &Zahl1); 
                printf("\nBitte geben Sie nun ihre zweite Zahl ein: "); 
                scanf("%d", &Zahl2); 
                } 
                printf("\nMoechten Sie eine weitere (letzte) Zahl eingeben? J/N: "); 
                scanf("%s", &Auswahl2); 
         if (Auswahl2 == 'j' && 'J') { 
                printf("\nBitte geben Sie nun ihre dritte und letzte Zahl ein: "); 
                scanf("%d", &Zahl3);     
                Resultat = (Zahl1 + Zahl2 + Zahl3); 
                printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat); 
                } 
         else if (Auswahl2 == 'N' && 'n') { 
                Resultat = (Zahl1 + Zahl2); 
                printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat); 
    } 
    
    else if (Auswahl == 2) { 
                printf("\n\nBitte geben Sie nun ihre erste Zahl ein: "); 
                scanf("%d", &Zahl1); 
                printf("\nBitte geben Sie nun ihre zweite Zahl ein: "); 
                scanf("%d", &Zahl2); 
                Resultat = (Zahl1 - Zahl2); 
                printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat); 
    } 
    
    else if (Auswahl == 3) { 
                printf("\n\nBitte geben Sie nun ihre erste Zahl ein: "); 
                scanf("%d", &Zahl1); 
                printf("\nBitte geben Sie nun ihre zweite Zahl ein: "); 
                scanf("%d", &Zahl2); 
                printf("\nMoechten Sie eine weitere (letzte) Zahl eingeben? J/N: "); 
                scanf("%s", &Auswahl2); 
                } 
         if (Auswahl2 == 'J' | 'j') { 
                printf("\nBitte geben Sie nun ihre dritte und letzte Zahl ein: "); 
                scanf("%d", &Zahl3);     
                Resultat = (Zahl1 * Zahl2 * Zahl3); 
                printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat); 
                } 
         else if (Auswahl2 == 'N' | 'n') { 
                Resultat = (Zahl1 * Zahl2); 
                printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat); 
    } 
    
    else if (Auswahl == 4) { 
                printf("\n\nBitte geben Sie nun ihre erste Zahl ein: "); 
                scanf("%d", &Zahl1); 
                printf("\nBitte geben Sie nun ihre zweite Zahl ein: "); 
                scanf("%d", &Zahl2); 
                Resultat = (Zahl1 / Zahl2); 
                printf("\n\nDies ist ihr Resultat: %d!\n\n", Resultat); 
    } 
        system("PAUSE"); 
        return 0;     
    }
    

    ich schätze das wolltest



  • Nein, das wollte er nicht.

    Wenn man die Einrückung anschaut, sieht man das die Klammer aus Zeile 23 in Zeile 36 gehört. Und auch bei Auswahl==3 die Klammer aus Zeile 53 in Zeile 64.

    Bleiben aber immer noch ein paar Probleme:
    - Was ist wenn Auswahl2 weder J noch N ist?
    - Was ist bei entsprechend großen Zahlen mit dem Überlauf?
    - Was passiert bei divison durch 0 (Null)?

    Das macht aber nichts, denn durch Fehler lernt man.



  • Vielen Dank für eure Antworten!

    Werde es gleich heut abend ausprobieren (bin grad am arbeitspc)

    @DirkB

    Bleiben aber immer noch ein paar Probleme:
    - Was ist wenn Auswahl2 weder J noch N ist?
    - Was ist bei entsprechend großen Zahlen mit dem Überlauf?
    - Was passiert bei divison durch 0 (Null)?

    Das kommt alles noch, sobald das Prog. so wie es jetzt ist funzt^^



  • DirkB schrieb:

    Nein, das wollte er nicht.

    Wenn man die Einrückung anschaut, sieht man das die Klammer aus Zeile 23 in Zeile 36 gehört. Und auch bei Auswahl==3 die Klammer aus Zeile 53 in Zeile 64.

    Bleiben aber immer noch ein paar Probleme:
    - Was ist wenn Auswahl2 weder J noch N ist?
    - Was ist bei entsprechend großen Zahlen mit dem Überlauf?
    - Was passiert bei divison durch 0 (Null)?

    Das macht aber nichts, denn durch Fehler lernt man.

    Danke DirkB, hat nun geklappt, man man, nur wegen diesen 2 Klammern so ein riesen Prob. 😞


Anmelden zum Antworten