Console schließt immer.



  • Hallo,

    ich bin neu in der programmierung von C++. Stehe noch in den Anfangstiefeln 🙂

    Wenn ich den folgenden Code in Microsoft Visual Studio 8 Beta 2 ausführe,
    dann geht die Console nur kurz an und dann ganz schnell wieder aus.

    #include <iostream>

    int main()
    {
    char c;

    c = 65;
    std::cout << "c: " << static_cast<int>(c) << std::endl;
    }

    Wenn ich den Code benutze hier dann kann ich garkeine .exe erstellen dann sagt der Fehler usw.:

    Code:

    #include <iostream>

    int main()
    {
    char c[2][6];

    c[0][0] = 'H';
    c[0][1] = 'a';
    c[0][2] = 'l';
    c[0][3] = 'l';
    c[0][4] = 'o';
    c[0][5] = '\0';
    c[1][0] = 'W';
    c[1][1] = 'e';
    c[1][2] = 'l';
    c[1][3] = 't';
    c[1][4] = '\0';
    std::cout << c[0] << " " << c[1] << std::endl;
    }

    Fehlerlog:

    1>------ Build started: Project: testttttttttt, Configuration: Debug Win32 ------
    1>Compiling...
    1>stdafx.cpp
    1>Compiling...
    1>testttttttttt.cpp
    1>c:\c++\projekte\testttttttttt\testttttttttt\testttttttttt.cpp(1) : warning C4627: '#include <iostream>': skipped when looking for precompiled header use
    1> Add directive to 'stdafx.h' or rebuild precompiled header
    1>c:\c++\projekte\testttttttttt\testttttttttt\testttttttttt.cpp(20) : fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source?
    1>Build log was saved at "file://c:\c++\Projekte\testttttttttt\testttttttttt\Debug\BuildLog.htm"
    1>testttttttttt - 1 error(s), 1 warning(s)
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

    Mit freundlichem Gruß

    mOnis



  • Zum 1. Punkt: http://c-plusplus.net/forum/viewtopic-var-t-is-111042.html
    Zum 2. Punkt: Du musst Precompiled Headers in den Projektoptionen abschalten.



  • ah ok danke, aber kann man auch eine NICHT-Console erstellen die nicht unter win32 läuft wo das nicht passiert? oder muss jedes Mini-Code den ich aus ein Tutorial nehme so preparieren?

    mOnis



  • Wenn Du das Programm im Visual Studio 2005 (BTW: Die Express-Edition samt Service Pack 1 ist kostenlos, Du brauchst keine Beta benutzen 😉 ) starten willst, gibt es zwei weitere Möglichkeiten:

    1. Starte das Programm über den Menüpunkt "Starten ohne Debuggen", dann hält das Studio die Konsole für Dich offen.

    2. Setze einen Haltepunkt auf die letzte Zeile von main.



  • aber mach doch einfach eine wait()-funktion und die kopierst du immer ueber deine main-funktion und rufst sie am ende einmal auf.

    mfg,
    julian



  • thx.



  • oder getch(); am ende der main...



  • aber wenn dann noch zeichen im eingabepuffer sind, funktioniert es wahrscheinlich nicht.

    mfg,
    julian



  • Steht doch alles gross und breit in der FAQ



  • ja ich kriege es jetzt hin... vielen dank.



  • Wenn man die cstdlib einbindet, kann man unter Windows auch einfach das Pausenprogramm benutzen:

    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        cout << "Hallo Welt." << endl;
        system("PAUSE");
    
        return 0;
    }
    

    Find ich immer schick, weil man direkt mit 2 Zeilen was Interaktives hat 😉



  • hallo ?

    schonmal die FAQ gelesen? http://www.c-plusplus.net/forum/viewtopic-var-t-is-111042.html

    ich zitiere:

    FAQ schrieb:

    Achtung: Der Auruf von system("pause") ist *kein* adäquater Ersatz. Warum system() grundsätzlich gemieden werden sollte (nicht nur weil es verdammt langsam ist) findet ihr in diesem FAQ-Beitrag: http://www.c-plusplus.net/forum/viewtopic-var-t-is-39453.html

    und nur weil es ein zweizeiler ist, ist es noch lange was "interaktives"

    besser ist es wie in der FAQ beschrieben in eine funktion auszulagern, dann hast du halt ein "Wait();" statt dein ekelhaft aussehenden "system("PAUSE");" und zudem ist es dann auch ueberall einsetzbar

    #include <iostream>
    
    int main(int argc, char *argv[])
    {
        std::cout << "Hello World" << std::endl;
        Wait();
    }
    

    (auch noch using namespace hast du dabei #wuerg)



  • Hallo!

    Meine Güte, piss dich doch nich so an...

    Ich weiß nich, was daran so schlimm ist, in den ersten HelloWorld & Taschenrechner Programmen, die man sowieso weder als CGI verwendet noch auf verschiedenen System en installiert, das Programm so abzuschließen. Und die WinAPI Funktion aus der FAQ ist auch nicht überall einsetzbar.

    Gerade als Einsteiger is man froh über solche einfach zu merkende Befehle. Und wer an der Sprache genügend Interesse zeigt, der wird nach einigen Wochen von selber seine Wait Funktion schreiben.

    Und was is am namespace so furchtbar? Kotz dich ruhig aus, ich halt dir gern auch die Haare ausm Gesicht :p



  • noNeed 4 aNick schrieb:

    ... noch auf verschiedenen System en installiert, das Programm so abzuschließen. Und die WinAPI Funktion aus der FAQ ist auch nicht überall einsetzbar....

    wiederspricht sich oder ?

    ich kotz deshalb weil cih es grundsaetzlich schlecht finde einen anfaenger schlechte sachen beizubringen, der lernt das so, macht das dann immer so und denkt es waere gut, und spaeter dann zu sagen "so macht man das nicht", das waere eine umgewoehnung, und die halte ich fuer unnoetig

    wenn dann gleich richtig lernen, nicht solche halbwahrheiten



  • Ne, es widerspricht sich nicht, ich bezog mich da auf deine Aussage:

    [...] und zudem ist es dann auch ueberall einsetzbar

    Ich meinte nur, dass die WinAPI-Möglichkeit aus der FAQ auch nicht universell einsetzbar ist.

    Naja, ich find das system("PAUSE") prägt sich gut ein und wenn man nen größeres sinnvolles Programm schreibt, dann wird das sowieso nicht damit enden.

    Aber wie auch immer, es gibt in der FAQ auch gute Alternativen...



  • Ich verstehe ehrlich gesagt nicht, wieso das immer wieder ein Thema ist. Es gibt einen kurze, adäquate Befehlsfolge um das Schließen zu verhindern. Das ist eine Funktion, die man erstmal garnicht verstehen muss, sondern einfach anwendet.

    system("PAUSE") ist ein Systemaufruf, der ein externes Programm startet, welches jetzt zufällig auch eine eigene Datei sein könnte, die die Festplatte löscht. Um sowas nicht zu brauchen lernt man doch C++, oder würde jemand auf die Idee kommen, zu vermitteln system("ECHO hello world") wäre eine tolle Idee?

    So, und hier mal PAUSE.EXE in C++ als Funktion (nicht, dass das nicht schon öfters hier aufgetaucht ist :D)

    #include <iostream>
    #include <limits>
    
    void PAUSE()
    {
      std::cout << "Drücken Sie eine beliebige Taste . . . " << std::flush;
      std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
      std::cin.get();
    }
    

    Ok, nicht ganz, mit PAUSE kann man eine beliebige Taste drücken, hier muss man Enter drücken.



  • Davon abgesehen, dass das hier schon x-mal durchgesprochen wurde, ist das aber eine tolle Diskussion!

    P.S.:

    Krux: Danke 😃

    😃 😃 😃



  • @noNeed 4 aNick

    in der FAQ steht nicht nur die WinAPI methode, sondern auch die cpp methode wie sie LordJaxom zwei beitraege ueber mit auffuehrt
    ich sag mal - wozu eine externes programm starten wenn es das eigene problemlos beherscht



  • Also ich find es garned so schlimm wenn Anfänger erstmal system("PAUSE") benutzen ... auch wenn es schlecht ist.

    Jedoch hab ich kein verständniss warum du was gegen using namespace hast, das wird sogar in kommerziellen Programmen verwendet (ich bin doch ned so blöd und schreib jedesmal tausende von sachen vor n befehl)

    using namespace System;
    using namespace System::Windows::Forms;
    using namespace System::Collections;
    

    und da willst du jedesmal "System::Windows::Forms" vor ürgend ne Funktion, oder classe, oder was auch immer schreiben? 😕

    na dann viel Spass dabei!



  • PHWITTI schrieb:

    und da willst du jedesmal "System::Windows::Forms" vor ürgend ne Funktion, oder classe, oder was auch immer schreiben? 😕

    Diese langen namespace-Dinger hat ja eigentlich auch nur C# 😉 Das "using namespace" ist halt Geschmackssache, nur weil Mr. Evil (ha, der Name sagt es schon!) es sagt, wird es nicht zum Gesetz 💡

    Nicht bös gemeint, Mister 🙂


Anmelden zum Antworten