Ergebnis 1 bis 10 von 10
  1. #1
    Mitglied
    Registriert seit
    Feb 2008
    Beiträge
    447
    Danksagungen
    3

    Standard Fehler bei Getränkeautomat in C

    Halli hallo,

    ich haben folgenden Code und bekomme immer diesen Fehler (anscheinend ist da aber kein Fehler zusehen?):

    In function 'main':
    32 error: expected ';' before '}' token (habe die Line markiert)
    === Build finished: 1 errors, 0 warnings ===

    Code:
    // Getränkeautomat
    
    #include <stdio.h>
    #include <stdlib.h>
    
    int main() {
    
        //Getränkeliste
        printf("\n        Our drinks:");
        printf("\n--------------------------");
        printf("\n1) Coca Cola         1.85$");
        printf("\n2) Ice Tea           1.45$");
        printf("\n3) Water             1.20$");
    
        //Getränkeauswahl
        int choice;
        double costs, payed, payed2;
        double dollars[12] = {0.01, 0.05, 0.10, 0.25, 0.50, 1,        //Münzen
                              2, 5, 10, 20, 50, 100} ;                //Scheine, keine 1$ Note
    
        printf("\n\n\nPlease choose your drink: ");
        scanf("%d", &choice);
    
        -std=c99;
    
        switch (choice) {
            case 1:
                costs = 1.85;
                printf("\nYou choose Coca Cola. Please insert 1.85$: ");
                break;
    
            case 2:
                costs = 1.45;
    LINE 32             printf("\nYou choose Ice Tea. Please insert 1.45$: ");
                break;
    
            case 3:
                costs = 1.20;
                printf("\nYou choose Water. Please insert 1.20$: ");
                break;
    
            default:
                printf("\nYou choose nothing. See you!");
                exit(0);
        }
    
        scanf("%lf", &payed);
    
        while (payed < costs) {
            printf("Please insert more money (%2.2lf$ left): ", costs - payed);
            scanf("%lf", &payed2);
            payed += payed2;
        }
    
        printf("\nYou insert: %2.2lf\nYour change: %.2lf\n", payed, payed - costs);
    
        if (payed > costs) {
            printf("Take: \n");
            payed -= costs;        //in payed steht ab jetzt nur noch das verbleibende Wechselgeld
    
            for (int i = 11; i >= 0; i--) {
                if (payed >= dollars[i]) {
                    printf("%d x %10.02lf$\n", int(payed / dollars[i]), dollars[i]);
                    payed -= int(payed / dollars[i]) * dollars[i];
                }
            }
        }
    
        return 0;
    }
    Kann mir da jemand von euch helfen?

    Vielen Dank im vorraus!
    Geändert von Larius (14. 12. 2012 um 20:59 Uhr) Grund: Will was ausprobieren -> php auf code abgeändert.

  2. #2
    Mitglied Avatar von stefbrot
    Registriert seit
    May 2006
    Ort
    An meinem PC
    Beiträge
    2.844
    Danksagungen
    62

    Standard Re: Fehler bei Getränkeautomat in C

    Das einzige was an dem Code nicht passt ist das -std=c99 in Zeile 24, wie auch immer das da hingekommen ist. Warum dein Compiler dann einen Fehler in Zeile 32 anzeigt weiß ich nicht.

  3. #3
    Mitglied
    Registriert seit
    Apr 2011
    Beiträge
    238
    Danksagungen
    12

    Standard Re: Fehler bei Getränkeautomat in C

    Zitat Zitat von Metal_Rex Beitrag anzeigen
    Halli hallo,

    PHP-Code:
    // Getränkeautomat

    #include <stdio.h>
    #include <stdlib.h>

    int main() {

        
    //Getränkeliste
        
    printf("\n        Our drinks:");
        
    printf("\n--------------------------");
        
    printf("\n1) Coca Cola         1.85$");
        
    printf("\n2) Ice Tea           1.45$");
        
    printf("\n3) Water             1.20$");

        
    //Getränkeauswahl
        
    int choice;
        
    double costspayedpayed2;
        
    double dollars[12] = {0.010.050.100.250.501,        //Münzen
                              
    25102050100} ;                //Scheine, keine 1$ Note


        
    printf("\n\n\nPlease choose your drink: ");
        
    scanf("%d", &choice);

        -
    std=c99
    Ich Hoffe das ist ein Copy&Paste Error das -std=c99 sollte auf der Commandline nicht in den C Code.

    Zitat Zitat von Metal_Rex Beitrag anzeigen
    Halli hallo,
    PHP-Code:
                    printf("%d x %10.02lf$\n"int(payed dollars[i]), dollars[i]);
                    
    payed -= int(payed dollars[i]) * dollars[i];

    hier willst du eine funktion namens int rufen welche ein parameter hat.
    ich denke du willst hier ein cast machen. dann müsstest du das ganze sol machen

    PHP-Code:
     payed -= (int) (payed dollars[i]) * dollars[i]; 
    Abgesehen von denn zwei Sachen ist dein Programm syntaktisch Korrekt und sollte Kompilert werden können.
    Generell würde ich dir jedoch raten das du das Programm so umgestalltest das es intern mit Cent rechnet. Das hätte den Vorteil das deine beträge Komplett in int speichern könntest und so die Rundungfehler vermeiden kannst welche double haben kann.

    Ausserdem kann man sicher noch an einigen stellen Optimieren. So gibtst du oft werte in den printf aus welche du dannach ein zweites mal berechnest, im switch den betrag welchen du in "costs" speicherst und in der for schleife am ende. Das ist ineffektiv und kann dadürch verbessert werden das due denn Variablen inhalt ausgibst.

    Wenn du ein fleiss Bienchen haben willst fällt dir sicher auch auf das die printf im switch sich nur durch den Getränke namen unterscheiden. denn könnstest du vielleicht auch in eine Variable (char array == String ) packen und das printf nur einmal nach den switch rufen.

  4. #4
    Mitglied Avatar von stefbrot
    Registriert seit
    May 2006
    Ort
    An meinem PC
    Beiträge
    2.844
    Danksagungen
    62

    Standard Re: Fehler bei Getränkeautomat in C

    > hier willst du eine funktion namens int rufen welche ein parameter hat.
    In C++ wäre das ist eine gültige Möglichkeit für einen Typecast. Das nennt sich function-style cast. In C ist das eigentlich nicht möglich.

    > Generell würde ich dir jedoch raten das du das Programm so umgestalltest das es intern mit Cent rechnet.
    > Das hätte den Vorteil das deine beträge Komplett in int speichern könntest und so die Rundungfehler vermeiden kannst welche double haben kann.
    Das ist mir auch gerade aufgefallen. Wenn man zum Beispiel Coca Cola bestellt und 2 bezahlt, gibt es 1x10 und 4x1 als Rückgeld. Wenn man mit Gleitkommazahlen rechnet hat man immer Ungenauigkeiten.

    Außerdem funktioniert der Platzhalter %lf bei printf nicht so richtig. Eigentlich sollte das mit C99 nichts ausmachen, aber bei mir gibt er für alle Zahlen 0.00 aus. Verwende lieber nur %f, das vermeidet Probleme.

  5. #5
    Mitglied

    (Threadstarter)


    Registriert seit
    Feb 2008
    Beiträge
    447
    Danksagungen
    3

    Standard Re: Fehler bei Getränkeautomat in C

    Zitat Zitat von stefbrot Beitrag anzeigen
    Das einzige was an dem Code nicht passt ist das -std=c99 in Zeile 24, wie auch immer das da hingekommen ist. Warum dein Compiler dann einen Fehler in Zeile 32 anzeigt weiß ich nicht.
    Ich habs da einfach hingemacht, weil ich selber keine Ahung hatte ob es einen bestimmten Platz braucht^^ Habe es jedoch in den Einstellungen eingestellt aber wo muss es den in dem Code hin?

    Ja Programm werde ich noch in Cent rechnen lassen.

    Zitat Zitat von stefbrot Beitrag anzeigen
    Außerdem funktioniert der Platzhalter %lf bei printf nicht so richtig. Eigentlich sollte das mit C99 nichts ausmachen, aber bei mir gibt er für alle Zahlen 0.00 aus. Verwende lieber nur %f, das vermeidet Probleme.
    Dann gibt er mir aberwarning: format '%f' expects type 'float *', but argument 2 has type 'double *' als Fehler aus obwohl es ja richtig ist?

    Trotz alledem ist immernoch das Problem da wie zu Anfang xD
    Geändert von Metal_Rex (14. 12. 2012 um 11:10 Uhr)

  6. #6
    Mitglied Avatar von stefbrot
    Registriert seit
    May 2006
    Ort
    An meinem PC
    Beiträge
    2.844
    Danksagungen
    62

    Standard Re: Fehler bei Getränkeautomat in C

    Ich habs da einfach hingemacht, weil ich selber keine Ahung hatte ob es einen bestimmten Platz braucht^^ Habe es jedoch in den Einstellungen eingestellt aber wo muss es den in dem Code hin?
    -std=c99 ist ein Compilerflag und gehört im Code überhaupt nirgends hin. Und auch wenn das nirgendwo im Code steht kommt immer noch ein Fehler in Zeile 32?

    Das mit dem %lf bzw. %f ist mal wieder vom Compiler abhängig und vom verwendeten Standard und vor allem wie genau sich der Compiler an den Standard hält. Wenn dein Compiler lieber %lf will und die Zahlen richtig ausgegeben werden dann lass es so, ich wollte es nur erwähnen falls du damit mal Probleme hast. Eigentlich sollte %lf auch funktionieren mit C99, aber der gcc hat damit irgendwie ein Problem.

    Welchen Compiler hast du denn?

  7. #7
    Mitglied

    (Threadstarter)


    Registriert seit
    Feb 2008
    Beiträge
    447
    Danksagungen
    3

    Standard Re: Fehler bei Getränkeautomat in C

    Ich nutze Code Blocks mit gcc ist das dann? BIn mir aber selber unsicher welchen IDE ich nutzen soll. Daran kann es aber nicht liegen?

    Ja trotzdessen kommt das Problem in Zeile 32. Vorallem ist es richtig.

  8. #8
    Mitglied
    Registriert seit
    May 2007
    Beiträge
    188
    Danksagungen
    1

    Standard Re: Fehler bei Getränkeautomat in C

    Code:
    // Getränkeautomat
    
    #include <stdio.h>
    #include <stdlib.h>
    
    int main() {
    
        //Getränkeauswahl
        int choice;
        double costs, payed, payed2;
        double dollars[12] = {0.01, 0.05, 0.10, 0.25, 0.50, 1,        //Münzen
                              2, 5, 10, 20, 50, 100} ;                //Scheine, keine 1$ Note
        int i;
       
      //Getränkeliste
        printf("\n        Our drinks:");
        printf("\n--------------------------");
        printf("\n1) Coca Cola         1.85$");
        printf("\n2) Ice Tea           1.45$");
        printf("\n3) Water             1.20$");
    
        printf("\n\n\nPlease choose your drink: ");
        scanf("%d", &choice);
    
        switch (choice) {
            case 1:
                costs = 1.85;
                printf("\nYou choose Coca Cola. Please insert 1.85$: ");
                break;
    
            case 2:
                costs = 1.45;
                printf("\nYou choose Ice Tea. Please insert 1.45$: ");
                break;
    
            case 3:
                costs = 1.20;
                printf("\nYou choose Water. Please insert 1.20$: ");
                break;
    
            default:
                printf("\nYou choose nothing. See you!");
                exit(0);
        }
    
        scanf("%lf", &payed);
    
        while (payed < costs) {
            printf("Please insert more money (%2.2lf$ left): ", costs - payed);
            scanf("%lf", &payed2);
            payed += payed2;
        }
    
        printf("\nYou insert: %2.2lf\nYour change: %.2lf\n", payed, payed - costs);
    
        if (payed > costs) {
            printf("Take: \n");
            payed -= costs;        //in payed steht ab jetzt nur noch das verbleibende Wechselgeld
    
            for (i = 11; i >= 0; i--) {
                if (payed >= dollars[i]) {
                    printf("%d x %10.02lf$\n", (int)(payed / dollars[i]), dollars[i]);
                    payed -= (int)(payed / dollars[i]) * dollars[i];
                }
            }
        }
    
        return 0;
    }
    Kannst du das übersetzen?

  9. #9
    Mitglied Avatar von stefbrot
    Registriert seit
    May 2006
    Ort
    An meinem PC
    Beiträge
    2.844
    Danksagungen
    62

    Standard Re: Fehler bei Getränkeautomat in C

    Zitat Zitat von Metal_Rex Beitrag anzeigen
    Ich nutze Code Blocks mit gcc ist das dann? BIn mir aber selber unsicher welchen IDE ich nutzen soll. Daran kann es aber nicht liegen?
    Ich habe auch CodeBlocks mit (mingw) gcc. An der IDE liegt es wohl kaum, wenn dann an der Compilerversion. Aber wenn ich die Casts korrigiere lässt sich der Code problemlos kompilieren, sowohl mit dem mingw gcc unter Windows als auch mit dem gcc unter Linux.

    Zitat Zitat von Metal_Rex Beitrag anzeigen
    Ja trotzdessen kommt das Problem in Zeile 32. Vorallem ist es richtig.
    Mir fällt dazu nicht mehr viel ein.
    In Zeile 32 ist weit und breit keine geschweifte Klammer zu sehen, alle Semikolons sind da wo sie sein sollen, keine Ahnung was der Compiler will.
    Eventuell hilft ein Compilerupdate. Ich bin zwar nicht davon überzeugt dass es hilft, aber das sind eben die Verzweiflungstipps, wenn sonst nichts hilft (retry, restart, reinstall oder so ähnlich)

  10. #10
    Mitglied

    (Threadstarter)


    Registriert seit
    Feb 2008
    Beiträge
    447
    Danksagungen
    3

    Standard Re: Fehler bei Getränkeautomat in C

    Mh i wie liefs gestern und heut nimmer

  11.  
     
     

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •