return-Werte weiterverwenden
-
"Statische Variablen müssen bei ihrer Definition initialisiert werden."
Ich nutze zwar keine C++ Bücher, aber das wiederspricht dem was ich gelernt habe. Und zwar das globale und statische Variablen standartmässig mit 0 initialisiert werden, sofern nicht anders angegeben.
-
mit static deklarierte variablen werden defaul-mäßig mit 0 initialiesiert!
EDIT: zuspät
-
Entyl_Sa schrieb:
"Statische Variablen müssen bei ihrer Definition initialisiert werden."
Ich nutze zwar keine C++ Bücher, aber das wiederspricht dem was ich gelernt habe. Und zwar das globale und statische Variablen standartmässig mit 0 initialisiert werden, sofern nicht anders angegeben.Danke für die Aufklärung. Im Buch stand es so das statische Variablen mit bei ihrer definition initialisiert werden müssen und da ich nie mit statischen Variablen arbeite wusste ich das nicht, habe es auch nie getestet.
Code-Hacker
-
Ahja, danke...
Das return kann ich also in dem Fall ganz weg lassen, oder?Das würde dann insgesamt so aussehen:
#include <iostream> using namespace std; int fakultaet(int n) { static unsigned long z=1; for (int i = 1; i <= n; ++i) { z *= i; } } int main() { int n; cout << "Dieses Programm berechnet die Fakultaet einer Zahl, die Sie eingeben und mit \n[Enter] bestaetigen.\n"; cin >> n; cout << n << "!=" << fakultaet(n) << "\n"; }
Allerdings läuft's dann auch nur bis zur Eingabe von n & bricht dann ab, ohne die Fakultät auszugeben... sorry, dass ich euch hier so damit nerv
Ich benutze Oliver Böhm - C++ Echt Einfach (Verlag: Franzis')
microchip
-
vielleicht noch ein
cin.ignore(cin.rdbuf()->in_avail()); cin.get();
hinterher? (nach dem
cout << z << "! = " << /*etc*/
(sorry, hab nicht gecheckt, dass er das return in fakultät meint. dachte an das return in main)
-
Doch das return muss sein, schließlich musst du den Wert ja auch wieder zurükgeben. Deswegen ja auch das int vor Fakultät was bedeutet das die Funktion einen Rückgabewert erwartet.
Code-Hacker
-
[quote="davie"]vielleicht noch ein
cin.ignore(cin.rdbuf()->in_avail()); cin.get();
hinterher? [quote]
Uhm, was bedeutet denn das?? Und nein, es hilft leider nicht...
-
#include <iostream> using namespace std; int fakultaet(int n) { static unsigned long z=1; //warum static? for (int i = 1; i <= n; ++i) { z *= i; } return z; //hier: einen wert zurückgeben! } int main() { int n; cout << "Dieses Programm berechnet die Fakultaet einer Zahl, die Sie eingeben und mit \n[Enter] bestaetigen.\n"; cin >> n; cout << n << "!=" << fakultaet(n) << "\n"; //eventuell noch cin.ignore etc. }
Tut mir sehr leid, ich hab nur gedacht, du meinst das return in main und hab nicht gesehen, dass du das return in fakultaet auch ausgelassen hat. dort ist es nämlich notwendig, denn die funktion muss ja einen wert zurückgeben.
Seltsam, dass sich dein Compiler nicht darüber aufgeregt hat.
-
Ah, mit Visual C++ funktioniert's, nur mit Bloodshed Dev-C++ nicht. Warum auch immer...
-
static habe ich gelassen, sollte man natürlich nicht tun, wenn man die fakultät berechnet.
Code-Hacker