antenne Geschrieben 1. September 2015 Teilen Geschrieben 1. September 2015 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Polar Geschrieben 1. September 2015 Teilen Geschrieben 1. September 2015 Warum liegt das Switch außerhalb der Main-Funktion? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
antenne Geschrieben 1. September 2015 Autor Teilen Geschrieben 1. September 2015 kann ich dir nicht sagen. so ist es im buch abgebildet. bzw. der erste teil steht im buch und der zweite teil für sich auch im buch. und man soll wohl den zweiten teil mit dem ersten verbinden. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
sas86ks Geschrieben 1. September 2015 Teilen Geschrieben 1. September 2015 Und du hast ihn falsch verbunden Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Polar Geschrieben 1. September 2015 Teilen Geschrieben 1. September 2015 (bearbeitet) #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 1. September 2015 von Polar Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
antenne Geschrieben 1. September 2015 Autor Teilen Geschrieben 1. September 2015 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
pr0gg3r Geschrieben 1. September 2015 Teilen Geschrieben 1. September 2015 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 */ Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
127.0.0.1 Geschrieben 1. September 2015 Teilen Geschrieben 1. September 2015 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.... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
antenne Geschrieben 2. September 2015 Autor Teilen Geschrieben 2. September 2015 (bearbeitet) 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 2. September 2015 von antenne Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mfk'); DROP TABLE Users;-- Geschrieben 2. September 2015 Teilen Geschrieben 2. September 2015 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Polar Geschrieben 2. September 2015 Teilen Geschrieben 2. September 2015 Inkludiere conio.h und verwende getch() vor(!) der schließenden Klammer der Main-Funktion. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
antenne Geschrieben 2. September 2015 Autor Teilen Geschrieben 2. September 2015 habe ich gemacht. was bewirkt es? sehe keinen unterschied. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Polar Geschrieben 2. September 2015 Teilen Geschrieben 2. September 2015 Das sollte dafür sorgen, dass die Konsole nach der Ausgabe der Note etc geöffnet bleibt Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
antenne Geschrieben 2. September 2015 Autor Teilen Geschrieben 2. September 2015 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
habbeda Geschrieben 6. September 2015 Teilen Geschrieben 6. September 2015 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) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Griller Geschrieben 6. September 2015 Teilen Geschrieben 6. September 2015 Anmerkung 1: nicht fflush() für STDIN benutzen! Wieso sollte man das nicht nutzen, wenn ich fragen darf? Hat unser Lehrer auch immer benutzt. Gesendet von meinem Nexus 5 mit Tapatalk Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mfk'); DROP TABLE Users;-- Geschrieben 7. September 2015 Teilen Geschrieben 7. September 2015 Das Verhalten von fflush mit Eingabeströmen ist undefiniert. Das funktioniert mit einigen Compilern für Windows, aber portabel ist das nicht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.