Zum Inhalt springen

punkte berechnung


antenne

Empfohlene Beiträge

hallo leute. ich hab ein problem. ich lerne gerade von grund auf programmieren und habe mir dazu ein buch gekauft. in diesem buch stand folgendes Beispiel

#include <stdio.h>

int main () {

int punkte;

int note;

printf ("Ihre Punktzahl, bitte: ");

scanf ("%d", &punkte);

if (punkte < 30)

note = 6;

else if (punkte < 50)

note = 5;

else if (punkte < 67)

note = 4;

else if (punkte < 81)

note = 3;

else if (punkte < 92)

note = 2;

else

note = 1;

printf ("Sie haben die Note %d erreicht.\n", note);

return 0;

}

switch (note) {

case 6:

printf ("ungenügend\n");

break;

case 5:

printf ("mangelhaft\n");

break;

case 4:

printf ("ausreichend\n");

break;

case 3:

printf ("befriedigen\n");

break;

case 2:

printf ("gut\n");

break;

case 1:

printf ("sehr gut\n");

break;

default:

printf ("unzulässige Eingabe\n");

}

wenn ich mit der cmd.exe gcc noten.c eingebe kommt folgende Fehlermeldung:

error: expected identifier or '(' before 'switch' switch (note) {

kann mir jemand sagen was genau falsch ist?

vielen dank

Link zu diesem Kommentar
Auf anderen Seiten teilen

#include <stdio.h>


int main (void) { //Beginn Main

    int punkte;

    int note;

    printf ("Ihre Punktzahl, bitte: ");

    scanf ("%d", &punkte);

    if (punkte < 30)

        note = 6;

    else if (punkte < 50)

        note = 5;

    else if (punkte < 67)

        note = 4;

    else if (punkte < 81)

        note = 3;

    else if (punkte < 92)

        note = 2;

    else

        note = 1;


    printf ("Sie haben die Note %d erreicht.\n", note);

//return 0; Brauchst du nicht

// }Hier falsch

    switch (note) {

        case 6:

            printf ("ungenügend\n");

            break;

        case 5:

            printf ("mangelhaft\n");

            break;

        case 4:

            printf ("ausreichend\n");

            break;

        case 3:

            printf ("befriedigen\n");

            break;

        case 2:

            printf ("gut\n");

            break;

        case 1:

            printf ("sehr gut\n");

            break;

        default:

            printf ("unzulässige Eingabe\n");

    } // Hier wäre es richtig

} // Ende Main

Da Switch aus der Main-Funktion draußen war, hatte es keinen Bezug zur Main. Return 0 umgehe ich immer, in dem ich ein void in der Main-Klammer verwende.

Bearbeitet von Polar
Link zu diesem Kommentar
Auf anderen Seiten teilen

Also hat er es im Buch ungeschickt beschrieben? Weil im Buch steht switch und danach diese { Klammer.

Das { nach dem Switch ist schon in Ordnung:


switch(irgendwas) {

 case 123: /* irgendwas */ break;

 case 456: /* irgendwas anderes */ break;

 default: /* noch was/*

}

Dieser Abschnitt muss allerdings in deine main-Funktion:

int main (void) {


 /* irgendwas davor */


 /* hier dein Switch */


 /* irgendwas danach */


}


/* hier darf das Switch nicht stehen */


Link zu diesem Kommentar
Auf anderen Seiten teilen

Also hat er es im Buch ungeschickt beschrieben? Weil im Buch steht switch und danach diese { Klammer. Ich probiere es morgen auf Arbeit mal aus und melde mich dann ob es geklappt hat. Vielen dank schon mal

ich gehe jede wette ein, dass in kapitel 1 deines buches die mainfunktion erklärt wird und auch, wie diese funktion abgeschlossen wird....

Link zu diesem Kommentar
Auf anderen Seiten teilen

erstmal vielen dank für die hilfe ! klappt einwandfrei. eine kleine frage noch. wenn ich die exe normal im windows starte und es mich nach der punktzahl fragt, gebe ich dann eine zahl ein drücke enter und das programm schließt sich gleich wieder. wenn ich die exe per cmd öffne funktioniert es ohne probleme. muss ich da noch irgendwas umschreiben oder ist das normal?

und @ 127.0.0.1 - natürlich wurde die main funktion beschrieben und wie sie funktioniert. aber jemanden der noch nie auch nur ein wort programmiersprache beherrscht, schreibt es eben so ab wie es im buch steht. ich habe mir alles vor dem beispiel durchgelesen. und nur, dass return 0 verursacht, dass alles was danach kommt ignoriert wird hab ich so richtig verstanden. ich hatte es hier allerdings so gepostet wie es im buch steht. also mit return 0 vor diesem switch befehl.

jetzt geht es und ich kann erstmal weiter lernen. Danke nochmal !

edit: hab jetzt nochmal nachgeschaut zwecks main. Es steht im groben da, dass main die funktion des hauptprogramms übernimmt. als absoluter neuling verstehe ich darunter aber nicht, dass alles was ich schreiben möchte innerhalb von main stehen muss.

Bearbeitet von antenne
Link zu diesem Kommentar
Auf anderen Seiten teilen

wenn ich die exe normal im windows starte und es mich nach der punktzahl fragt, gebe ich dann eine zahl ein drücke enter und das programm schließt sich gleich wieder. wenn ich die exe per cmd öffne funktioniert es ohne probleme. muss ich da noch irgendwas umschreiben oder ist das normal?
Das ist normal. Du hast ein Konsolenprogramm geschrieben. Wenn das nicht aus einer schon laufenden Konsole gestartet wird, öffnet Windows für das Programm eine neue Konsole. Und wenn das Programm beendet ist, wird diese Konsole wieder geschlossen.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Das "Enter", mit welchem "scanf()" abgeschlossen wurde, steckt noch im Tastatur-Puffer. Somit wird es von einem nachfolgenden "getch()" eingelesen und Dein Programm beendet sich. Du musst also erstmal (nach scanf()) den Puffer leeren:


char *c = NULL;

while((c = getchar()) != '\n' && c != EOF) { /* wegwerfen */ }

Anmerkung 1: nicht fflush() für STDIN benutzen!

Anmerkung 2: getchar() ist mir persönlich sympathischer als getch() (siehe: Difference between getc(), getchar(), getch() and getche() - GeeksQuiz)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...