Läuft nicht...



  • tolle wurst

    als du es gepostet hast wars nicht drin, du hast es dann nochmal editiert



  • Okay, danke, mit "getch()" funktioniert es. Aber in meinem Buch (Jetzt lerne ich C++) steht das Beispiel genaso wie oben gezeigt. Warum geht das also nicht? Liegt das an dem Borland Builder?



  • Jonn schrieb:

    Okay, danke, mit "getch()" funktioniert es. Aber in meinem Buch (Jetzt lerne ich C++) steht das Beispiel genaso wie oben gezeigt. Warum geht das also nicht? Liegt das an dem Borland Builder?

    Tach erstmal

    es geht, aber er wartet nicht auf eine tastatureingabe sondern beendet das programm sofort mit dem return

    um übrigends beim C++-Standart zu bleiben:
    statt iostream.h solltest du istream einbinden
    dann sind die ausgabeobjekte wie cout in der std-klasse:

    std::cout<<"Hallo Welt\n";
    

    wenn du cout weiterhin nur mit cout ansprechen möchtest musst du unter die #include-sachen noch die zeile using namespace std; schreiben.
    ausserdem muss der rückgabewert von main() immer int sein (void war früher erlaubt). dann muss auch das return 0 zurückgeben und nicht gar nix:

    return(0);
    

    also so wäre es am besten:

    #include <iostream>
    
    int main()
        {
        std::cout<<"Hallo Welt\n";
        return(0);
        }
    

    als beweis, dass dein programm funktioniert, kannst du ja mal in die eingabeaufforderung gehen (start,ausführen,command für win9x, cmd für win>=2k), dich bis zu dem verzeichnis, in dem deine executable (*.exe) datei liegt durch-cd'en und dann den namen der exe eingeben. dann sollte das hier erscheinen:

    C:\>cd cpp
    C:\cpp>cd hallo_welt
    C:\cpp\hallo_welt>hallo_welt
    Hallo Welt
    
    C:\cpp\hallo_welt>
    

    wie du sieht funktioniert dein programm auch ohne getch() 😉



  • Ist das Buch vielleicht ein bissl älter? In DOS-Zeiten hättest
    du die Ausgabe noch zu sehen bekommen, da du das Programm aus der
    (immer offenen) Eingabeaufforderung von DOS aufgerufen hättest. Der
    Text wäre dann nicht verschwunden.



  • Jonn schrieb:

    Hallo, ich habe mir gerade ein Tutorial über C++ durchgelesen und möchte jetzt selbst herumprobieren.

    Dein Tutorial ist sehr veraltet, du solltest folgendes Tutorial dir lieber mal anschauen

    http://www.schornboeck.net/ckurs/index.htm



  • Jonn schrieb:

    Okay, danke, mit "getch()" funktioniert es. Aber in meinem Buch (Jetzt lerne ich C++) steht das Beispiel genaso wie oben gezeigt. Warum geht das also nicht? Liegt das an dem Borland Builder?

    "Jetzt lerne ich C++" von M&T nehme ich an?! Welche Auflage denn?(meine is von 2000)
    Ich habe das Buch nämlich auch und da steht das ganze schonmal so:

    #include <iostream.h>
    
    int main()
    {
    cout << "Hello World!\n";
    return 0;
    }
    

    Auch nit ganz ok, aber besser 😉

    Un zum rest is nix mehr anzufügen ^^



  • Ja, das Buch von M+T.



  • Die Standard-Freaks missbilligen getch() wegen der conio.h, haben aber selbst nichts Vergleichbares zu bieten. Daher trauen sich die Buchautoren nicht, dies in ihre Progamme aufzunehmen, weder getch() noch ein selbst entwickeltes wait(). Eine leicht schizophrene Situation.



  • Mit

    cin.get();
    

    sollte auch gewartet werden. Es muss allerdings <Enter> gedrückt werden um das Programm zu beenden.

    Code-Hacker



  • Nein, cin.get() reicht leider nicht immer aus. Siehe FAQ.
    Hier die ausführliche Version zum besseren Verständnis:

    #include <iostream>
    
    #include <iostream>
    
    void wait()
    {
        std::cin.clear();
    
        std::streambuf* pbuf = std::cin.rdbuf();
        std::streamsize size = pbuf->in_avail();
        std::cin.ignore(size);
    
        std::cin.get();
    }
    
    int main()
    {
        wait();
    }
    


  • Ist aber ein Windows/Konsolen-spezifisches Problem. Bei Linux ruft man das Programm direkt in der Konsole auf.



  • .. schrieb:

    Nein, cin.get() reicht leider nicht immer aus. Siehe FAQ.

    Das habe ich ja nicht gesagt, also das es immer ausreicht. Ich wusste nur das es geht, dass es nicht immer ausreicht wusste ich auch, nur wusste ich leider nicht wie man das behebt und habe es absichtlich nicht erwähnt *g*, jetzt weiß ich es ja, dank dir und dem Thread von falky (wobei ich das nicht getestet habe von ihm). 🙂

    Code-Hacker



  • ok, nur der vollständigkeit halber:

    Procyon schrieb:

    dann muss auch das return 0 zurückgeben und nicht gar nix:

    return(0);
    

    in main darf das weggelassen werden.
    Und noch ein Link zum Thema cin/Buffer leeren/auf Enter warten 🙂


Anmelden zum Antworten