Kompilierte Anwendung scchließt



  • Videonauth schrieb:

    Was fürn Heckmeck für nichts ...

    wer auf nem Windows System arbeitet hat doch echt gute möglichkeiten ohne jemals die Konsole zu bemühen.

    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        // TODO: Code
    
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    

    Jo, nur leider geht es darum dass es nicht geschlossen wird, nachdem es bereits kompiliert wurde. Das ist unportabel. Und was soll return EXIT_SUCCESS ? Das ist aus C. Bitte kein using namespace std; Und Kommandozeilenparameter brauchst du theoretisch auch nicht 😃 🤡

    Wenn, dann so:

    int main()
    {
        //To-Do Code
        std::cin.get();
    }
    


  • Wer Visual Studio benutzt: STRG+F5, um Konsolenprogramme zu starten. Dann kann man sich system sparen.



  • Hacker schrieb:

    Jo, nur leider geht es darum dass es nicht geschlossen wird, nachdem es bereits kompiliert wurde. Das ist unportabel.

    😕 Denkst du auch mal nach, oder schreibst du immer erst? Dein "nur leider..." macht überhaupt keinen Sinn.

    Hacker schrieb:

    Bitte kein [c]using namespace std;

    Warum nicht?

    Hacker schrieb:

    Und Kommandozeilenparameter brauchst du theoretisch auch nicht 😃 🤡

    Wo siehst du hier Kommandozeilenparameter?

    Hacker schrieb:

    Wenn, dann so:

    int main()
    {
        //To-Do Code
        std::cin.get();
    }
    

    Ganz miese Lösung. Wenn noch was im Eingabepuffer ist, stoppt dein Programm hier nicht.



  • _matze schrieb:

    Hacker schrieb:

    Jo, nur leider geht es darum dass es nicht geschlossen wird, nachdem es bereits kompiliert wurde. Das ist unportabel.

    😕 Denkst du auch mal nach, oder schreibst du immer erst? Dein "nur leider..." macht überhaupt keinen Sinn.

    Wieso? Was er vorschlägt, ist ja, dass man vor dem Compilieren dafür sorgt, dass die Konsole nicht geschlossen wird, hier geht es jetzt eher mehr um das aufrufen aus der Konsole heraus, oder im Explorer, us.

    _matze schrieb:

    Hacker schrieb:

    Bitte kein using namespace std;

    Warum nicht?

    Weil es auch hier unnötig ist. Da wird nicht einmal irgendetwas aus der StandardBibliothek benutzt, also... schlechtes Vorbild 🙄

    _matze schrieb:

    Hacker schrieb:

    Und Kommandozeilenparameter brauchst du theoretisch auch nicht 😃 🤡

    Wo siehst du hier Kommandozeilenparameter?

    Bei der main() -funktion?

    Und zur cin.get() Abfrage: Dann eben das Teil aus der FAQ, kann jetzt den Link nicht finden...



  • Das gibts nicht, ich hab einen Forum-Bug gefunden 😃



  • Das

    system("pause");

    funktioniert bestens auch nach dem compilieren, es bewirkt das man eine Meldung bekommt eine Taste zu drücken.

    Nich immer erst meckern. einfach mal compilieren , dabei sei bemerkt, das funktioniert nur auf Windows systemen und das schon seit Win 95. Im Grunde lässt man sein programm den DOS befehl 'pause' ausführen, kann man auch mal selber in der Konsole testen und einfach 'pause' eingeben.

    Zu den Koandozeilen Parametern das ist halt einfach in meinem Basis Dokument mit drinne und ich lösch es halt nicht wenn ich mal schnell was zusammen hacke.



  • Videonauth schrieb:

    dabei sei bemerkt, das funktioniert nur auf Windows systemen und das schon seit Win 95.

    😑 😡 🙄

    Ja genau das ist ja der Punkt, du Dödel. 😃

    Außerdem hast du im Beispiel vergessen, cstdlib zu implementieren.



  • Und hier nochmal save und portabel.

    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        // TODO: Code
    
        cin.clear();
        cin.ignore(1000, '\n');
        cin.get();
        return 0;
    }
    


  • Hacker schrieb:

    Außerdem hast du im Beispiel vergessen, cstdlib zu implementieren.

    Findest du es nicht ein bisschen übertrieben, dass er für sein kleines Programm noch cstdlib implementieren soll? 😃



  • Hacker schrieb:

    Wieso? Was er vorschlägt, ist ja, dass man vor dem Compilieren dafür sorgt, dass die Konsole nicht geschlossen wird, hier geht es jetzt eher mehr um das aufrufen aus der Konsole heraus, oder im Explorer, us.

    Deine Formulierung ist einfach Müll. Wie so oft, leider. Versuch doch mal, Sätze zu schreiben, die alle auch im ersten Durchlauf unmissverständlich verstehen.

    Hacker schrieb:

    _matze schrieb:

    Hacker schrieb:

    Bitte kein using namespace std;

    Warum nicht?

    Weil es auch hier unnötig ist. Da wird nicht einmal irgendetwas aus der StandardBibliothek benutzt, also... schlechtes Vorbild 🙄

    Dann schreib das doch gefälligst vernünftig dahin. So sieht es aus, als würdest du generell using namespace verbieten wollen. Das muss dir doch klar sein. 🙄

    Hacker schrieb:

    Bei der main() -funktion?

    Ach so, ok. Ich dachte, du meinst was anderes und drückst dich wieder ungünstig aus. Aber ganz ehrlich, wen stört es denn, wenn man seine main immer mit Parametern notiert?

    Hacker schrieb:

    Und zur cin.get() Abfrage: Dann eben das Teil aus der FAQ, kann jetzt den Link nicht finden...

    Hierbei ist es wichtig sich zu überlegen, warum man überhaupt das Schließen der Konsole verhindern will. Ist es ein Dienst am Benutzer, also soll es so auch im fertigen Programm bestehen bleiben?

    Falls ja, sind Lösungen wie cin.get, getchar und auch system("pause") nicht optimal, selbst wenn sie erst mal funktionieren. Bei getchar & Konsorten würde zumindest das Leeren des Eingabepuffers fehlen (sonst fügst du irgendwann eine Eingabefunktion hinzu und wunderst dich, dass die Konsole nicht mehr offen bleibt). Und system("pause") ist nicht portabel, wie wir alle wissen.

    Falls nicht, ist jegliche Portabilitätsdiskussion bereits hinfällig. Hier wollen wir nur noch das Ergebnis des Programms sehen, bevor sich die Konsole schließt. Und das lässt sich mit get/getchar (+leerer Eingabepuffer), system, STRG+F5 (VS) , mit dem Starten per Konsole oder mit jeder qualitativ gleichwertigen Methode erreichen (und alle genannten halte ich hier für mehr oder weniger gleichwertig). Wenn hier Code geschrieben wird, ist er nicht von Dauer und verschwindet sowieso wieder. Ich persönlich bevorzuge STRG+F5, damit spare ich mit überflüssige Codezeilen.



  • _matze schrieb:

    Ich persönlich bevorzuge STRG+F5, damit spare ich mit überflüssige Codezeilen.

    Das heißt, Du schreibst ein Konsolenprogramm, das bestimmte Dinge erledigt, Output auf die Konsole schreibt, den Du kontrollieren/sehen/überprüfen willst/musst, und wenn Du es dann ausführen willst, startest Du erst Dein Visual Studio, lädst das entsprechende Projekt, und drückst nun STRG F5?

    Klingt ziemlich umständlich ...



  • Belli schrieb:

    _matze schrieb:

    Ich persönlich bevorzuge STRG+F5, damit spare ich mit überflüssige Codezeilen.

    Das heißt, Du schreibst ein Konsolenprogramm, das bestimmte Dinge erledigt, Output auf die Konsole schreibt, den Du kontrollieren/sehen/überprüfen willst/musst, und wenn Du es dann ausführen willst, startest Du erst Dein Visual Studio, lädst das entsprechende Projekt, und drückst nun STRG F5?

    Klingt ziemlich umständlich ...

    Also entweder entwickelt man garde am Programm, dann befindet man sich in der IDE und kann daher auch Strg+F5 drücken. Oder das Programm soll benutzt werden. Dann startet man idealerweise für Konsolenprogramme die Kommandozeile und startet das Programm darin. Wenn das Programm selbstständig pausiert, nur damit die Ausgabe beim Klick in den Explorer lesbar ist, dann ist das meeh. Um sowas zu erreichen gibt es auf gängigen Betriebssystemen Batch-Jobs, wo man nach der Programmausführung pausieren kann...



  • Belli schrieb:

    _matze schrieb:

    Ich persönlich bevorzuge STRG+F5, damit spare ich mit überflüssige Codezeilen.

    Das heißt, Du schreibst ein Konsolenprogramm, das bestimmte Dinge erledigt, Output auf die Konsole schreibt, den Du kontrollieren/sehen/überprüfen willst/musst, und wenn Du es dann ausführen willst, startest Du erst Dein Visual Studio, lädst das entsprechende Projekt, und drückst nun STRG F5?

    Klingt ziemlich umständlich ...

    Natürlich nicht. Das habe ich auch nicht gesagt.



  • TAB-Vervollständigung in der Windows Konsole? Echt? Auch für Unterverzeichnisse?

    cd C:\
    
    cd Users\<TAB>
    

    Wieso bekomme ich da die Unterverzeichnisse von C:\ angezeigt??



  • pyhax schrieb:

    TAB-Vervollständigung in der Windows Konsole? Echt? Auch für Unterverzeichnisse?

    cd C:\
    
    cd Users\<TAB>
    

    Wieso bekomme ich da die Unterverzeichnisse von C:\ angezeigt??

    Welches Windows? Bei mir werden korrekt die Unterordner von c:\users angezeigt.



  • #include <iostream>
    using namespace std;
    
    int main()
    {
    cout<<"QQ"<<endl;
    
    cin.sync(); 
    cin.get(); 
    }
    


  • _matze schrieb:

    Belli schrieb:

    _matze schrieb:

    Ich persönlich bevorzuge STRG+F5, damit spare ich mit überflüssige Codezeilen.

    Das heißt, Du schreibst ein Konsolenprogramm, das bestimmte Dinge erledigt, Output auf die Konsole schreibt, den Du kontrollieren/sehen/überprüfen willst/musst, und wenn Du es dann ausführen willst, startest Du erst Dein Visual Studio, lädst das entsprechende Projekt, und drückst nun STRG F5?

    Klingt ziemlich umständlich ...

    Natürlich nicht. Das habe ich auch nicht gesagt.

    Dann erklär bitte noch einmal GENAU, wie das mit STRG + F5 funktioniert.



  • Was ist denn daran nicht zu verstehen?
    Während du das Programm entwickelst, startest du es mit STRG+F5, damit sich die Konsole nicht schliesst.
    Das fertige Programm wird aus der Konsole gestarten bzw. für die, die damit nicht umgehen können oder lieber aus dem Explorer starten wollen, gibts einen Batch-2-Zeiler, der die Konsole offen hält.



  • Jockelx schrieb:

    Was ist denn daran nicht zu verstehen?
    Während du das Programm entwickelst,

    Es war hier nirgendwo davon die Rede, dass sich die Frage lediglich auf die Entwicklungsphase bezog, oder habe ich das überlesen?



  • Ähm, nein? Deshalb hab ich die Antwort für die Post-Entwicklung auch nochmal extra wiederholt.
    Steht doch da, auch wenn du es nicht mitzitiert hast.


Anmelden zum Antworten