Läuft nicht...



  • Hallo, ich habe mir gerade ein Tutorial über C++ durchgelesen und möchte jetzt selbst herumprobieren. Dazu habe ich mir die Borland C++ Builder Enterprise Trail Version besorgt. Leider läuft das ganze nicht so, wie ich es gerne hätte. Unter Datei --> Neu --> Weitere --> Konsolen-Experte wollte ich ein ganz einfaches "Hello World" Programm machen. Als Einstellungen hab ich "C++", "Multi-Threads" (keine Ahnung, wozu die gut sind) und "Konsolen-Anwendung" ausgewählt. In dem darauffolgenden Fenster hab ich alles gelöscht und durch folgenden Code (ist aus dem Tut) ersetzt:

    #include <iostream.h>
    void main ()
    {
    cout << „Hallo Welt!“ << endl;
    return;
    }
    

    Warum funktioniert das nicht?



  • das funktioniert schon, nur siehst du es nicht, weil es gleich wieder verschwindet

    binde mal die "conio.h" mit ein und schreib vor dem return folgendes:

    getch();
    

    damit wartest du auf eine Tastatureingabe, bevor du die Konsole wieder verlässt.



  • hast du das wirklich so geschrieben:
    cout << „Hallo Welt!“ << endl; ???

    denn die so müsste es eigentlich aussehen:

    cout << "Hallo Welt!" << endl;
    weiß aber jetzt nicht genau ob das wirklich dein fehler ist...
    außerdem würde ich getch miteinbinden, da es anders bei dir natürlich nicht geht...

    Bj



  • Jonn schrieb:

    #include <iostream.h>
    void main ()
    {
    cout << „Hallo Welt!“ << endl;
    return;
    }
    

    Warum funktioniert das nicht?

    so wärs viel schöner :

    #include <iostream>
    #include <conio.h>    
    using namespace std;
    
    int main ()
    {
    cout << "Hallo Welt!" << endl;
    getch();
    return 0;
    }
    


  • trotzdem sollte da noch ein getch() mit rein, sonst bleibt immer noch der selbe effekt



  • Jester2000 schrieb:

    trotzdem sollte da noch ein getch() mit rein, sonst bleibt immer noch der selbe effekt

    ist doch ?



  • 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