Warum kein system("PAUSE"); vor und nachteile ?



  • Hallo,

    ich hab gehört das man den Befehl system("PAUSE"); nicht verwenden soll jetzt würde mich mal interessieren was man da sonst nehmen könnte.

    Und was genau ist so Schlimm an system("PAUSE"); welche Vor und Nachteile hat es gegenüber anderen Befehlen ?



  • Hast du dir schonmal diesen FAQ-Beitrag durchgelesen?





  • ok thx jetzt weiss ich warum man es vermeiden soll. Aber was könnte man dann als alternative nehmen ?



  • Das steht auch in der Konsolen-FAQ - Stichwort "Automatisches Schließen verhinern".



  • ok thx



  • Und genau das solltest du dann nicht nutzen, weil aus einem mir unbekannten Grund da immer noch eine nicht wirklich richtige alternative steht: http://www.c-plusplus.net/forum/viewtopic-var-p-is-1407480.html#1407480 ist da schon um einiges besser ...



  • Trotzdem finde ich system("pause") gar nicht so übel. Bei std::cin.get() muss man womöglich noch den Puffer leeren, und manchmal sind zwei Eingaben erforderlich. Zudem funktioniert nur die Enter-Taste.

    Solange man die Konsole nur zum Lernen benötigt und nicht ein ernsthaftes Projekt damit verfolgt oder etwas portieren will, finde ich system("pause") gerechtfertigt - es ist eben am einfachsten am Anfang. Und was das langsam angeht, das dürfte eh keine Rolle spielen. Meistens hat man den system -Aufruf ja nur einmal am Schluss, eventuell noch zwischendrin. Man sollte sich einfach der Nachteile bewusst sein und, wenn der Zeitpunkt gekommen ist, davon wegkommen.



  • Davon abgesehen das der Thread schon fast ein Jahr alt ist:

    Warum nicht einfach das Programm aus einer Konsole heraus starten? Dann braucht man so einen Unfug gar nicht. 😉



  • Fellhuhn schrieb:

    Warum nicht einfach das Programm aus einer Konsole heraus starten?

    Weil es mühsam ist, nicht einfach in der IDE einen einzigen Knopf zu drücken 😉



  • Nexus schrieb:

    Fellhuhn schrieb:

    Warum nicht einfach das Programm aus einer Konsole heraus starten?

    Weil es mühsam ist, nicht einfach in der IDE einen einzigen Knopf zu drücken 😉

    Jede vernünftige IDE lässt das Fenster entweder automatisch offen oder hat eine eigene eingebaute Konsole die auch offen bleibt.

    IMHO ist der Hauptgrund warum man system("PAUSE") nicht verwenden soll der das es einfach völlig überflüssig ist.


  • Administrator

    Nexus schrieb:

    Fellhuhn schrieb:

    Warum nicht einfach das Programm aus einer Konsole heraus starten?

    Weil es mühsam ist, nicht einfach in der IDE einen einzigen Knopf zu drücken 😉

    <CTRL>+<F5> (zumindest unter MSVC)
    Dies startet allerdings nicht den Debugger, kann man dann aber im Nachhinein starten lassen. Dafür hat es am Ende automatisch ein "Bitte drücken sie eine beliebige Taste...".

    Grüssli



  • Nexus schrieb:

    Fellhuhn schrieb:

    Warum nicht einfach das Programm aus einer Konsole heraus starten?

    Weil es mühsam ist, nicht einfach in der IDE einen einzigen Knopf zu drücken 😉

    Selbst wenn sonst nichts greift, warum nicht einfach einen Breakpoint setzen? 😉



  • Fellhuhn schrieb:

    Selbst wenn sonst nichts greift, warum nicht einfach einen Breakpoint setzen? 😉

    Oder warum nicht einfach system("pause") verwenden, wenn man damit keine Probleme hat und auch in absehbarer Zukunft keine damit haben wird? Dann kann man Programme auch direkt als Anwendung aus dem Windows Explorer starten.



  • Nexus schrieb:

    Fellhuhn schrieb:

    Selbst wenn sonst nichts greift, warum nicht einfach einen Breakpoint setzen? 😉

    Oder warum nicht einfach system("pause") verwenden, wenn man damit keine Probleme hat und auch in absehbarer Zukunft keine damit haben wird? Dann kann man Programme auch direkt als Anwendung aus dem Windows Explorer starten.

    endlich ma jmd, der das auch so sieht... Klar kann man auch dies, das und jenes machen und dann trotzdem noch unendlich viele Nachteile haben - aber man kann auch einfach system ("pause"); nutzen und sich freuen, dass man echt nix machen muss und trotzdem alles genau so gut klappt... Btw seh ich auch keinen Nachteil bei so einer Fkt:
    - sie ist meines erachtens nacht os-unabhängig, weil diese fkt von jedem os geboten wird...
    - die Geschwindigkeit (was sonst immer das größte Prob ist - von wegen extra shell öffnen, ...) ist eh egal, weil danach eh erst ma auf ne eingabe gewartet werden muss...

    bb



  • Gut, dass ich nicht der einzige bin 🙂

    Naja, bei paar Dingen habe ich sowieso das Gefühl, viele Leute halten sie für böse, aber wirklich Argumente gegen einen bestimmten Anwendungsfall gibts nicht (soll natürlich nicht heissen, dass system keine Nachteile hätte)... 😉



  • Nexus schrieb:

    Naja, bei paar Dingen habe ich sowieso das Gefühl, viele Leute halten sie für böse, aber wirklich Argumente gegen einen bestimmten Anwendungsfall gibts nicht (soll natürlich nicht heissen, dass system keine Nachteile hätte)... 😉

    Ist wahrscheinlich ähnlich goto oder dass Funktionen nicht länger als X Zeilen lang sollen. Man sollte sowas nicht großzügig überall im Code einsetzen, aber um schnell mal was zu erreichen oder wenn's in einer konkreten, eingegrenzten Situation nun mal Vorteile hat (z.B. schnellster Wildcard-Match-Algorithmus den ich kenne arbeitet mit 'goto's), kann man's ja ruhig machen.



  • - Konsolenprogramme beenden sich. Wenn mal ein system("pause") vergessen wird schimpft der Kunde 😃
    - pause.exe gibt's nicht auf jedem System.
    - seltsamerweise ist noch niemand auf die Idee gekommen, eine Ausgabe per system("echo hallo") zu coden, aber die einfache Aufgabe, auf eine Eingabe zu warten, soll an das System delegiert werden.

    Vor allem den letzten Punkt finde ich unter dem Gesichtspunkt, dass man doch Programmieren lernen möchte, eher bedenklich. 🙂



  • Nexus schrieb:

    Trotzdem finde ich system("pause") gar nicht so übel. Bei std::cin.get() muss man womöglich noch den Puffer leeren, und manchmal sind zwei Eingaben erforderlich. Zudem funktioniert nur die Enter-Taste.

    Wäre da nicht "while(!_kbhit());" eine Alternative?



  • _matze schrieb:

    Wäre da nicht "while(!_kbhit());" eine Alternative?

    klar. Du kannst auch die Funktion Wurstbrot() aufrufen und hoffen dass es funktioniert - Tatsache ist, dass weder system("pause") noch _kbhit() Standardkonform sind und damit nur eingeschränkt oder garnicht portabel.

    Tatsache ist auch, dass das "Hilfe-meine-Konsole-geht-zu"-Problem kein C++-Problem ist, und auch nur zum Teil ein OS-Problem, sondern vielmehr ein Anwenderproblem. Wenn der Anwender Konsolenprogramme nicht aus der Konsole sondern vom Desktop aus startet muss er damit rechnen dass es Effekte gibt die beim Start aus der Konsole nicht vorkommen.
    Man könnte natürlich argumentieren dass das trotzdem möglich sein sollte, weil ja viele Anwender ihre Programme vom Desktop aus starten - es gibt aber auch einige Anwender die nur von der Konsole aus arbeiten, sollte denen dann nicht auch ermöglicht werden, ihre GUI-Anwendungen einfach aus der Konsole zu starten? Ich möchte von meinem DOS-Rechner aus (oder auf meinem Server der eh keine grafische Oberfläche hat) ein Programm starten das eine GUI hat - also hätte ich gern einen Einzeiler á la system("pause") der mir in einem Kommandozeilen-OS mal eben on the fly einen grafischen Desktop aufbaut damit ich die GUI meines Programms sehe. </ironie>

    mein Fazit ist, es gibt zwei Möglichkeiten:
    a) Ich schreibe ein standardkonformes portables Konsolenprogramm. Konsolenprogramme sollten von der Konsole aus gestartet werden und bracuhen daher keinen "halt-mir-die-konsole-offen"-Schnickschnack.
    b) Ich schreibe ein Konsolenprogramm das vom Dekstop meines grafischen OS aus gestartet werden kann und offen bleiben soll. Das ist dann eh nicht portabel (nicht jedes OS ist grafisch), also kann ich auch nichtportable Funktionen benutzen.


Anmelden zum Antworten