Jump to content

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

Diesen Beitrag teilen


Link zum Beitrag
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

Diesen Beitrag teilen


Link zum Beitrag
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 */


Diesen Beitrag teilen


Link zum Beitrag
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....

Diesen Beitrag teilen


Link zum Beitrag
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

Diesen Beitrag teilen


Link zum Beitrag
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.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

achso. offen bleibt es wenn ich es mit cmd ausführe sowieso. nur wenn ich normal im windows die exe starte fragt es nach der punktzahl und wenn ich als beispeil 93 eingebe und enter drücke, schließt sich das prog ohne jegliche ausgabe. auch jetzt mit deinen 2 befehlen.

Diesen Beitrag teilen


Link zum Beitrag
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)

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden


×