verständnisfrage zu funktionen
-
ja, sorry, war falsch.
neues Stichwort: static ....
-
jetzt hab ich mir schon nach constant die finger wund gegoooglet!!!

-
jetzt zeig ich euch mal mein programm!
vllt kann mir dann jemand sagen warum es nicht geht, hab jetzt schon alles versucht.
#include <stdio.h> #include <math.h> float fragen(float glaeser, float menge,float prozent,float gramm,static float total, float spezalkohol) { printf("Wieviel Glaeser haben Sie getrunken?\n\n"); scanf("%f",&glaeser); printf("Wieviel Milliliter passten in Ihr Glas?\n\n"); scanf("%f",&menge); printf("Wieviel Alkohol enthielt Ihr Getraenk, bitte in Prozent angeben?\n\n"); scanf("%f",&prozent); gramm=(prozent*spezalkohol*menge)/1000; printf("Ein Glas enthielt %3.2f Alkohol Gramm Alkohol\n\n",gramm); total=gramm*glaeser; printf("Sie haben %3.2f Gramm Alkohol zu sich genommen!\n\n",total); printf("\n\nTotal:%2.2f\n\n",total); printf("Eine gesunde Leber baut 8 Gramm pro Stunden ab\n\n"); printf("Sie brauchen dafuer %2.2f Stunden\n\n",total/8); return glaeser,menge,prozent,gramm,total; } main() { float spezalkohol=7.89, menge=0, prozent=0, gramm=0,glaeser=0; static float total; char eingabe, ausgabe; fragen(glaeser,menge,prozent,gramm,total,spezalkohol); do { printf("Haben Sie noch ein anderes alkoholisches Getraenk getrunken?\n Ja tippen Sie j und fuer neun tippen Sie ein n ein\n\n"); eingabe=getch(); if (eingabe=='j') ausgabe=1; if (eingabe=='n') ausgabe=2; switch (ausgabe) { case 1: { fragen(glaeser,menge,prozent,gramm,total,spezalkohol); total+=total; break; } case 2: { printf("Gute Entscheidung!\n\n"); break; } } }while (eingabe!='n'); }alles rund um total könnte müll sein, da da ja der
fehler
liegt!
-
Erstmal zu deiner Funktion:
float fragen(float glaeser, float menge,float prozent,float gramm,static float total, float spezalkohol)Die Werte in Klammern nennen sich Parameter. Parameter werden dazu benutzt, um Werte beim Funktionsaufruf an die Funktion zu übergeben. Da du die Werte aber in der Funktion erst einliest, braucht nichts übergeben zu werden. Korrekt also:
float fragen (void) { float glaeser, menge, prozent, gramm, spezalkohol, total;Zurückgeben willst du ebenfalls nur total:
return total;fragen(glaeser,menge,prozent,gramm,total,spezalkohol); total+=total;mußt du dementsprechend abändern in:
total+=fragen()PS.: Arbeite doch erstmal ein Tutorial durch und arbeite dann in deinen Testprogrammen nur mit dem Inhalt der bereits abgearbeiteten Kapitel. Wenn du nicht weißt, was Funktionen sind, dann kannst du natürlich nicht damit arbeiten und dir einfach denken was das alles bedeuten sollte...
-
danke für die gute erklärung,
nur ein klitzekleines aber, er meckert nun dass das fnktionsergebnis eine funktion ist...

-
Eigentlich solltest du jetzt erkennen können, wo die Fehler liegen...
float spezalkohol=7.89, menge=0, prozent=0, gramm=0,glaeser=0; static float total; char eingabe, ausgabe; fragen(glaeser,menge,prozent,gramm,total,spezalkohol);float total; char eingabe, ausgabe; total = fragen(); /*hier...*/Und was mir gerade noch einfällt... spezalkohol scheint ja eine Konstante zu sein. Muß also in der Funktion mit spezalkohol=7.89 initialisiert werden, am Besten auch als const float.
PS.: Was bringt dir die Variable ausgabe?
eingabe = getch(); switch (eingabe) { case 'j': case 'n': }getch(); gibt übrigens einen int zurück, kein char.
-
soo, bin zwar schon ziemlich fertig, weil traurig, weils immer noch nicht geht,
aber da muss ich jetzt durch,
also
dieses total*=fragen(); muss doch in den case!?
aber das mag er irgendwie nicht, "ungültig weil vom typ float?", kann man doch auch addieren, komisch! und bei return zeigt er auch inkompatibel an...
und die variablen brauch in der main alle nicht, außer total, is ja cool!
aber eigentlich gibt die funktion doch einen wert zurück, den für total, warum ist das dann oben void?
danke für deine mühen, mir fällt es sehr schwer fragen zu formulieren, und daher danke, dass du mich verstehst!
-
stoeoe schrieb:
aber eigentlich gibt die funktion doch einen wert zurück, den für total, warum ist das dann oben void?
rückgabetyp funktionsname(parameter)
Bei float berechne(void) ist der Rückgabewert also ein float (der durch return bestimmt wird), vom Hauptprogramm verweigert er aber Parameter durch (void).dieses total*=fragen(); muss doch in den case!?
Kein Stern, ein + gehört da hin. Denke mal das ist ein Tippfehler. Die Anweisungen habe ich weggelassen, weil sie für die Beschreibung keine Rolle gespielt haben. Die gehören schon dahin, wo sie vorher auch waren.
-
warum gibt es hier keinen "weinen smiley"???
wieso geht das nicht
warum rechnet mit der nicht einfach das zusammen und gut,
wieso will der computer mich nicht verstehen, oder wieso verstehe ich c nicht...
hier mein programm, zum letzten mal, so wie es jetzt ist, falls noch nen fehler drin wäre ich dir sehr dankbar, wenn nicht und es trotzdem nicht geht fliegt der computer samt tisch gleich aus dem fenster

#include <stdio.h> #include <math.h> float fragen (void) (float glaeser, float menge, float prozent, float gramm, float spezalkohol, float total) { float spezalkohol=7.89, menge=0, prozent=0, gramm=0,glaeser=0,total; printf("Wieviel Glaeser haben Sie getrunken?\n\n"); scanf("%f",&glaeser); printf("Wieviel Milliliter passten in Ihr Glas?\n\n"); scanf("%f",&menge); printf("Wieviel Alkohol enthielt Ihr Getraenk, bitte in Prozent angeben?\n\n"); scanf("%f",&prozent); gramm=(prozent*spezalkohol*menge)/1000; printf("Ein Glas enthielt %3.2f Alkohol Gramm Alkohol\n\n",gramm); total=gramm*glaeser; printf("Sie haben %3.2f Gramm Alkohol zu sich genommen!\n\n",total); printf("\n\nTotal:%2.2f\n\n",total); printf("Eine gesunde Leber baut 8 Gramm pro Stunden ab\n\n"); printf("Sie brauchen dafuer %2.2f Stunden\n\n",total/8); return total; } main() { float total; char eingabe, ausgabe; do { printf("Haben Sie noch ein anderes alkoholisches Getraenk getrunken?\n Ja tippen Sie j und fuer neun tippen Sie ein n ein\n\n"); eingabe=getch(); if (eingabe=='j') ausgabe=1; if (eingabe=='n') ausgabe=2; switch (ausgabe) { case 1: { total+=fragen(); break; } case 2: { printf("Gute Entscheidung!\n\n"); break; } } }while (eingabe!='n'); }
-
bevor du noch mehr Threads über Funktionen startest und 100 Mal falsche Funktionen postest, lies dir lieber, wie Funktionen deklariert und verwendet werden: http://de.wikibooks.org/wiki/C-Programmierung:_Funktionen
du scheinst noch nicht begriffen zu haben, was eine Funktion ist also RTFM und lies dir den Link durch.
-
Ja, wie gesagt. Die Funktion ist schon wieder völlig falsch...
Technisch gesehen funktioniert das:
#include <stdlib.h> #include <curses.h> float fragen(float total) { float spezalkohol = 7.89, menge = 0, prozent = 0, gramm= 0 ,glaeser = 0, zeit; echo(); printw("Wieviele Gläser haben Sie getrunken? "); scanw("%f",&glaeser); printw("\nWieviel Milliliter passten in Ihr Glas? "); scanw("%f",&menge); printw("\nWieviel Alkohol enthielt Ihr Getränk? Bitte in Prozent angeben. "); scanw("%f",&prozent); gramm = (prozent * spezalkohol * menge) / 1000; printw("\nEin Glas enthielt %3.2f Alkohol Gramm Alkohol\n", gramm); total+=gramm*glaeser; printw("Sie haben %3.2f Gramm Alkohol zu sich genommen!\n", total); printw("Eine gesunde Leber baut 8 Gramm pro Stunden ab\n"); zeit = total / 8; printw("Sie brauchen dafuer %2.2f Stunden\n", zeit); return total; } int main(void) { float total = 0; int eingabe; initscr(); do { printw("\nHaben Sie noch ein anderes alkoholisches Getraenk getrunken?\nDrücken Sie 'j' für Ja und 'n' für nein.\n"); noecho(); eingabe=getch(); switch (eingabe) { case 'j': clear(); total = fragen(total); break; case 'n': printw("\nGute Entscheidung!\n"); break; } }while (eingabe != 'n'); printw ("\nBeliebige Taste drücken, um das Programm zu beenden."); getch(); endwin(); return EXIT_SUCCESS; }Die Berechnungen sind noch falsch und du mußt das (da du vermutlich unter Windows arbeitest) von curses.h an conio.h anpassen.
Edit.: Code so angepaßt, daß er korrekt funktioniert. Habe nicht alles überprüft, aber es lässt sich kompilieren und sieht richtig aus.
Supertux hat schon Recht mit seiner Aussage und dem Verweis auf ein Tutorial. für mich, als ebenfalls ziemlich unerfahrener Programmierer ist das aber immer eine schöne Übung.
-
wenn du wüsstest wie viel ich da schon drüber gelesen hab!
wie soll ich das denn machen?
ich stelle die fragen doch nicht zum spaß!
ich würde auch lieber auf dem sofa sitzen als am computer!!!!!!
ich möchte nur hilfe und wissen warum mein programm nicht geht!
dafür ist doch ein forum da!
-
stoeoe schrieb:
wenn du wüsstest wie viel ich da schon drüber gelesen hab!
dann frag ich mich, wie du auf eine solche Deklaration kommst
float fragen (void) (float glaeser, float menge, float prozent, float gramm, float spezalkohol, float total) {...stoeoe schrieb:
dafür ist doch ein forum da!
ich sagte nicht, dass du keine Fragen stellen darfst. Aber in den letzten Threads von dir ist mir aufgefallen, dass du Probleme damit hast, die Funktionen aufzubauen und so. Deswegen ja den Link für diesen Kapitel auf wikibooks.