komme nicht weiter
-
Hallo
mein Program läuft nicht, wo sind fehler drin???
Könnt ihr mir zeigen was ich falsch gemacht habe#include <iostream.h>
int Weihnachten (Tag, Monat, Jahr)
{
if (Jahr == 2003)
return (1) ;if (Jahr == 2004)
return (2) ;if (Jahr == 2002)
return (3) ;return (0) ;
}int main ();
float Tag, Monat, Jahr, Ergebnis;
Weihnachten (Tag, Monat, Jahr)
if (Ergebnis == 0)
cout << "Das Datum liegt im aktuellen Jahr";
if (Ergebnis == 1)
cout << "Das Datum liegt im vorletzten Jahr";
if (Ergebnis == 2)
cout <<"Das Datum liegt im letzten Jahr";
-
hast du schon mal drüber nachgedacht erstmal ein kleines hello-world-proggie zum laufen zu bringen...
du machst ja soviel falsch und hast überhaupt keine basics, das es nicht viel sinn machen würde dir an dem programm was du gerade versuchst zu schreiben zu helfen... lies mal ein buch für anfänger
-
lol, auch kein schlechter Versuch.
http://www.c-plusplus.net/forum/viewtopic.php?t=76000
//edit falsche topic musste erst suchen
-
das ganze programm is so voller fehler...
#include <iostream.h>
das wird zukünftig:
#include <iostream> using namespace std;
int Weihnachten (Tag, Monat, Jahr) { if (Jahr == 2003) return (1) ; if (Jahr == 2004) return (2) ; if (Jahr == 2002) return (3) ; return (0) ; }
du fragst nach tag/monat/jahr aber fragst nur jahr ab?
btw, nach return müssen die werte nich in Klammern.
desweiteren weis c++ nicht, welcher art die variablen sind, mit JAHR kann der compiler nichts anfangen, kann ja eine fließkommazahl sein, oder ne ganze zahl, oder vielleicht auch ein buchstabe.int main ();
ähm ja...
das is komplett falsch...int main (){ //hier kommt der ausführende teil deines programmes rein, die main, also alles, was bisher nach deiner main funktion kommt }
float Tag, Monat, Jahr, Ergebnis;
das kann man so machen,ausser dass man jahre nicht in 2003,4 misst,weshalb float relativ sinnlos ist^^
Weihnachten (Tag, Monat, Jahr)
aber das nicht.
1. da fehlt am ende das ";"
2. du hast weder tag noch monat noch jahr einen WERT gegeben, bisher sind die 3 variablen mit einem undefinierten Wert gefüllt-ganz schlecht.if (Ergebnis == 0) cout << "Das Datum liegt im aktuellen Jahr"; if (Ergebnis == 1) cout << "Das Datum liegt im vorletzten Jahr"; if (Ergebnis == 2) cout <<"Das Datum liegt im letzten Jahr";
ausser dass du dich bei den sätzen bei 1/2 vertan hast, hast du ergebnis keinen wert zugewiesen,also wieder undefiniertes verhalten
.
so is es besser:
#include <iostream> using namespace std; int Weihnachten (int Jahr) { if (Jahr == 2003) return 1; if (Jahr == 2004) return 2; if (Jahr == 2002) return 3; return 0; } int main(){ int Jahr,Ergebnis; cin>>Jahr; Ergebnis=Weihnachten(Jahr); if (Ergebnis == 0) cout << "Das Datum liegt im aktuellen Jahr"; if (Ergebnis == 1) cout << "Das Datum liegt im letzten Jahr"; if (Ergebnis == 2) cout <<"Das Datum liegt im vorletzten Jahr"; return 0; }
-
Auch als Anfänger sollte man lernen, gewisse Regeln einzuhalten. Grundsätzlich dürfen Funktionen nur ein return haben! Das könnte hier zB ein int ergebnis sein, dass du in den if-Zweigen füllst. Bei so kleinen Funktionen sieht das noch toll aus, wenn du aber mal grössere Programme im Team schreibst und Kollegen müssen deinen Code verstehen, werden die sich über viele returns freuen
-
To schrieb:
Grundsätzlich dürfen Funktionen nur ein return haben!
Veto! Das ist dogmatisches strukturiertes Denken. Aus einer Zeit, in der man in unübersichtlichen Sprachen lange unübersichtliche Programme geschrieben hat (Prozeduren > 200 Zeilen und solche Scherze). Man sollte das doch etwas differenzierter sehen.
-
#ifndef _meineMeinung
#define _meineMeinungich denke, daß es sehr ratsam ist als Anfänger zuerst die strenge strukturierte Art zu lernen (ging mir auch so). Ist nicht nur ne' Konvention, sondern auch logisch einfacher. Wenn man nachher im oop-style mit exception schmeißt ist das natürlich gut so:-))
#endif
-
don't feed trolls
-
Lieber Bashar,
dein Veto in Ehren, aber in der strukturierten Programmierung sollte man das wirklich einhalten! Wenn du bei deinen Differenzierungen an OOP und exceptions denkst, gebe ich dir Recht. Das ist natürlich professionell und richtig, aber nicht mir einem return vergleichbar. Exceptions sind schon aufgrund ihrer sinnvollen Bennenung besser lesbar und werden irgendwo erwartet und "gefangen". Ein return ist nur ein einfacher Abbruch, der erst am Ende erfolgen sollte!
Aber ist ja auch egal...Wetter ist viel zu schön dafür
-
Eine Grundregel für optimiertes Programmieren lautet: Brich deine Funktion/Schleife möglichst früh ab, wenn es nichts sinnvolles mehr zu tun gibt. Nun hat man 2 Möglichkeiten:
int myfunc() { bool foo = false; ... ... if(foo) return ergebnis_1; ... ... if(foo) return ergebnis_2; ... ... if(foo) return ergebnis_3; return def; }
oder
int myfunc() { bool foo = false; int retval; ... ... if(foo) { retval = ergebnis_1; goto ret; } ... ... if(foo) { retval = ergebnis_2; goto ret; } ... ... if(foo) { retval = ergebnis_3; goto ret; } retval = def; ret: return retval; }
Was Schaut hier wohl strukturierter aus?
[edit] unabsichtlich keyword als variablenname verwendet[/edit]
-
komm bitte nur ein return!?! was soll das denn? ich meine ich bin ja nur anfänger aber es gibt hundertausendsachen die man mit mehreren returns viel einfacher lösen kann! warum gibt es denn auch sonst die möglichkeit? man kann es selbstverständlich übertreiben aber wenn mehrere returns eine gute lösung darstellen dann soll man sie doch bitte auch benutzen. wie soll man das denn sonst lösen wenn eine funktion irgendeine entscheidung trifft und dann einen passenden wert dazu liefert? ich bin mir sicher dass auch die leute die so funktionen wie char(foo) geschrieben haben irgendwie sowas wie ein switch haben, dass dann mehrere returns beinhaltet...