Notenschnitt
-
Hallo Leute!
Ich bin neu beim lernen der Computersprache C und versuche im Moment Funktionen in meinen Programmen unter zu bringen.
Jetzt habe ich aber leider ein kleines Problem und habe keine Ahnung was das bedeutet oder wie ich es beheben kann.
Ich möchte gerade ein Programm schreiben, dass dem Benutzer ermöglich seinen Notendurchschnitt zu berechnen. Ziemlich Lahm ja ich weiß aber dies ist für mich leider schon ne ziemliche Herausforderung da wie ich schon sage das Programm mit Funktionen verbinden möchte.
Zum Programm selbst:
Es soll dem Benutzer auffordern anzugeben wie viele noten er den hat.
Dann soll der Benutzer die Noten eingeben.
Jetzt wird der Notendurchschnitt berechnet.
Ende
Lange rede kurzer sinn
Wenn ich den folgenden Quellcode/Programmcode verwende bekomme ich keine return 0 sondern ne return 1. dabei öffnet sich auf die Makefile.win datei und mir stellen sich die haare zu Berge, denn ab da hab ich keine ahnung was $(CC) $(LINKOBJ) -o $(BIN) $(LIBS) heißt denn das leuchtet immer rot! xD
Bitte um Hilfe#include <stdio.h> #include <stdlib.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ // Funktions-Prototypen int anzahlEingabe(); float notenEingabe(int anzahl); // Hauptprogramm int main(int argc, char *argv[]) { int anzahl; float summe; anzahl=anzahlEingabe(); summe=notenEingabe(anzahl); printf("\nDie Summe ist %.2f\n", summe); printf("Der Notendurchschnitt ist %.2f\n", summe/anzahl); return 0; } //Funktionen int anzahlEingaben() { int anzahl; printf("\nBitte geben Sie hier die Anzahl der Noten ein: "); scanf("%d", &anzahl); printf("\n Danke."); return anzahl; } float notenEingabe(int anzahl) { float noten[anzahl], summe=0; int i; for(i=0;i<anzahl;i++) { printf("\nBitte geben Sie hier eine Note ein: "); scanf("%f", ¬en[i]); } for(i=0; i<anzahl; i++) { summe+=noten[i]; } return summe; }
Ps.: Ich möchte bitte keine komplett Lösung sondern nur , dass man mir sag was kann ich besser machen wo liegt der Fehler. Oder z.B.: kuck mal da überprüfe/verbessere mal da was, ich glaube da habe ich was gesehen. Ihr wisst was ich meine
Ich muss es ja lernen und nicht immer vorgelegt bekommen.
Danke im voraus mit allen möglichen was ich habe.
-
Benutzt du den Dev-C++ Compiler/IDE?
Ich hatte das Problem auch und musste mein PRogramm speichern, den Compiler schließen und neu starten. Dann konnte ich erfolgreich kompilieren, scheint ein Bug zu sein...Denn auf den ersten Blick scheint dein Programm in Ordnung zu sein...
TIPP: Ich würde noch eine while() Schleife um die scanf() Befehle drum rum machen für die korrekte Eingabe, in etwa so:
float notenEingabe(int anzahl) { float noten[anzahl], summe=0; int i; for(i=0;i<anzahl;i++) { printf("\nBitte geben Sie hier eine Note ein: "); while(Noten[i]>0&&Noten[i]<16) //Rechnest du mit Punkten oder Noten? Wenn Noten, dann musst du das natürlich in >0 und <7 ändern scanf("%f", ¬en[i]); } for(i=0; i<anzahl; i++) { summe+=noten[i]; } return summe; }
-
Hallo TocToc!
Vorweg vielen Danke für die Super schnelle antwort.
Ja ich verwende den Dev-C++ Compiler und ich habe es leider auch schon neugestartet denn diesen fehler hatte ich öfter nur jetzt geht es einfach nicht mehr weg.Ich nehmen deinen vorschlag an und finde ihn spitzenmäßig! Setze ich gleich um voll cool danke.
-
Dann denke ich ist das ein Problem vom Dev-C++, der ist sowieso so´'n bissl buggy. Du kannst mal probieren zu speichern, dann schließen, in deinen Ordner navigieren wo deine Projekte gespeichert sind und die Datei MakeFile.win (heißt die so? ich glaub schon) zu löschen.
Starte dann wieder dein Projekt und probiers nochmal. Wie gesagt, das Problem hatte ich auch schon.
-
Ich habe nun sowohl deinen Vorschlag als auch einen weiteren Compiler getestet.
Beides negativ. Beim zweiten Compiler Code::Blocks kommt die Fehlermeldung im Reiter DoxyBlocks:
Execution of 'doxygen' failed.
Please ensure that the doxygen 'bin' directory is in your path or provide the specific path in DoxyBlocks' preferences.Done.
Also irgendwie bin ich für das programmieren nicht geschaffen. Haha
schaffe es nicht mal ein simples Programm auf die Füße zu stellen.
-
"oxygen" heißt Sauerstoff. Alles klar.
-
nein doxygen xD ich habe bei dem Fehler nur copy paste gemacht
-
Weiß ich doch
PS: Ich bin jetzt überfragt was das Problem ist
-
schade haha
aber zumindest weiß ich das auch ein Profi ein Problem mit meinem code hat und das programm wirklich nochmal überdenken muss.
-
doxygen ist ein (externes) Tool zur Dokumentation.
Du wirst das irgendwo in der GUI angeschaltet haben.
Code::Blocks ist eine IDE. Mit der kann man verschiedene Compiler nutzen. Es gibt eine Version, da wird der gcc mitgeliefert.
Dev-C++ ist auch eine IDE, die den MinGW (Windowsportierung vom gcc) nutzt.
Die Entwicklung von Dev-C++ wurde 2005 eingestellt und 2011 unter einem anderen Namen fortgesetzt: https://de.wikipedia.org/wiki/Orwell_Dev-C%2B%2B
Die alte Version ist aber immer noch im Umlauf. Überprüfe mal deine.Noch zu deinem Programm:
Bei notenEingabe brauchst du kein Array.
-
Compiler geben i.A. mehr als "return 1" als Fehlermeldung aus. Wichtig ist vor allem die erste Meldung, der Rest sind meist Folgefehler.
Der Linker kann auch fehlschlagen, wenn z.B. das Programm noch ausgeführt wird, weil du es nach einem Test nicht (richtig) beendet hast.
-
Hallo Leute! Danke für die Unterstützung!
Also zum erstenDirkB schrieb:
Dev-C++ ist auch eine IDE, die den MinGW (Windowsportierung vom gcc) nutzt.
Die Entwicklung von Dev-C++ wurde 2005 eingestellt und 2011 unter einem anderen Namen fortgesetzt: https://de.wikipedia.org/wiki/Orwell_Dev-C%2B%2B
Die alte Version ist aber immer noch im Umlauf. Überprüfe mal deine.Danke für die Info hab das mal gecheckt und habe bereits die Neuste version 27. April 2015
DirkB schrieb:
Noch zu deinem Programm:
Bei notenEingabe brauchst du kein Array.Versteh ich nicht ganz warum? ich muss doch für jede note eine variable angeben und um dies vom benutzer steuern lassen zu können wie viele Variablen es sind brauch ich ja ne Array oder? und kann die noten dann durch den index auslesen lassen. oder haben ich das falsch verstanden?
DirkB schrieb:
Compiler geben i.A. mehr als "return 1" als Fehlermeldung aus. Wichtig ist vor allem die erste Meldung, der Rest sind meist Folgefehler.
Der Linker kann auch fehlschlagen, wenn z.B. das Programm noch ausgeführt wird, weil du es nach einem Test nicht (richtig) beendet hast.
es wurde alles richitg beendet. auch ein neustart des PC hatte nichts verbessert. aber ich habe nun den fehler den er mir anzeigt, kann jedoch nichts damit anfangen.
Line Col File Message leer leer D:\Programme\Notendurchschnitt\main.o main.c(.text+0x15):undefined reference to `anzahlEingabe' leer leer D:\Programme\Notendurchschnitt\collect2.exe [Error] ld returned 1 exit status 25 leer D:\CProgramme\Notendurchschnitt\Makefile.win recipe for target 'Notendurchschnitt.exe' failed
das sind die 3 die mir angezeig werden wenn dir das irgenwie weiter hilft wäre ich hammer mäßig dankbar
grüße azumiPs.: Ich habe natürlich die funtion anzahlEingabe bereits überprüft und konnte nichts entecken.
-
Azumi schrieb:
DirkB schrieb:
Noch zu deinem Programm:
Bei notenEingabe brauchst du kein Array.Versteh ich nicht ganz warum? ich muss doch für jede note eine variable angeben und um dies vom benutzer steuern lassen zu können wie viele Variablen es sind brauch ich ja ne Array oder? und kann die noten dann durch den index auslesen lassen. oder haben ich das falsch verstanden?
Du kannst gleich in der Einleseschleife die Summe bilden:
for(i=0;i<anzahl;i++) { printf("\nBitte geben Sie hier eine Note ein: "); scanf("%f", ¬e); summe+=note; }
Azumi schrieb:
Ps.: Ich habe natürlich die funtion anzahlEingabe bereits überprüft und konnte nichts entecken.
Dann schau nochmal genau hin. Du deklariest zwar eine Funktion mit dem Namen (Zeile 7), definierst diese aber nicht.
Du musst genau hinsehen!Hättest du gleich die Fehlermeldung gepostet, wäre die erste Antwort passend gewesen.
-
Oh mein Gott!
DirkB du bist genial. haha
und es tut mir leid das ich das vorher nicht schon geschrieben habe mit der Fehlermeldung für die Zukunft weiß ich das auch.
Ich habe den Fehler entdeckt und er war mehr als dämlich...
Vielen vielen Danke für die große Hilfe von euch und ich hoffe mal ich kann euch das nächste mal nicht so extrem Nerven!In diesem Sinne Cloesed!