return-Werte weiterverwenden



  • Code-Hacker schrieb:

    static unsigned long z;
    

    z wurde nie initialisiert.

    Doch. Siehe unter static in deinem Lieblings-C++-Buch.



  • Bashar schrieb:

    Code-Hacker schrieb:

    static unsigned long z;
    

    z wurde nie initialisiert.

    Doch. Siehe unter static in deinem Lieblings-C++-Buch.

    Bei ihm ist sie aber nicht initialisiert und laut "C++-Programmierung" dürfte es dann einen Compilerfehler geben, denn in dem Buch steht "Statische Variablen müssen bei ihrer Definition initialisiert werden.". In dem Buch "Die C++-Programmiersprache" habe ich nichts gefunden zu der Aussage des anderen Buches. Achja und woher weißt du welches mein Lieblingsbuch ist? Ich persönlich lege mich da eigentlich nicht fest, ich kann aber nur Bücher empfehlen die ich kenne und das fand ich von den gelesenen sehr gut ("C++-Programmierung").

    Code-Hacker



  • "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


Anmelden zum Antworten