Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

#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

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 */


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....

  • Autor

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

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.
  • Autor

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.

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)

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.