getchar(),getch()

  • C++

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • getchar(),getch()

    hallo
    ich wollte mal meine schon etwas eingestaubten c++ kentnisse wieder auffrischen und als ich langsam, sehr langsam eingestiegen bin(hello world programm) hab ich festgestellt, dass die console ja das programm sofort nach dem ausführen beendet
    dann hab ich mir gedacht das man ne taste drücken soll zum beenden hab mit getch() (conio.h) und getchar() (stdio.h) probiert
    hab sie jedesmal im programmcode nach der cout anweisung gesetzt aber bei der programmausführung kamen sie jedesmal vor der cout anweisung und man kann wieder die ausgabe nicht sehen(sie wird aber tatsächlich ausgegeben)
    kleine anmerkung noch: benutze visual c++ 6
    was mach ich falsch
    ich hoffe ihr könnt mir helfen


    hello world programm

    PHP-Quellcode

    1. #include <iostream.h>
    2. int main()
    3. {
    4. cout<<"Hello World\n";
    5. return 0;
    6. }


    ps. so hats geklappt aber ich will eigentlich cout benutzen

    PHP-Quellcode

    1. #include <stdio.h>
    2. int main()
    3. {
    4. printf("Hello World\n");
    5. getchar();
    6. return 0;
    7. }
  • ich habs ja so versucht

    PHP-Quellcode

    1. #include <iostream.h>
    2. #include <stdio.h>
    3. int main()
    4. {
    5. cout<<"Hello World\n";
    6. getchar();
    7. return 0;
    8. }
    Alles anzeigen

    aber wie oben schon beschrieben
    die hello world ausgabe wird erst angezeigt nachdem eine taste gedrückt wurde, sie ist dann halt aber nicht mehr lesbar, weil das programm gleich beendet(die console schliesst)
  • danke für den tipp
    aber dann kommt die fehlermeldung
    error C2065: 'system' : undeclared identifier
    muss ich erst nach ne header dazu einbinden?

    edit: habs selbst rausgefunden die windows.h
    aber:die taste soll man wieder drücken bevor die ausgabe kommt
    ich werd verrückt

    edit2:
    ich habs jetzt
    also ich hab des

    PHP-Quellcode

    1. "\n"
    durch

    PHP-Quellcode

    1. <<endl

    keine ahnung was das jetzt genau anderes bewirkt hat aber es funktioniert

    vielen dank
  • Also "\n" und "endl" bewirken 100% das gleiche.
    "\n" wird "normalerweise" in 'C' verwendet, und der endLine-Befehl ist C++ Standart.

    Aber ich kann mir beim besten Willen nicht vorstellen das ein '\n' auf eine Tastatureingabe wartet.


    MFG
    Meine Sig war zu lang und wurde deswegen durch einen Moderator gelöscht......
  • Also "\n" und "endl" bewirken 100% das gleiche.

    nein tun sie nicht
    sie springen beide zwar in die nächste zeile aber mein problem beweisst ja dass sie unterschiedliche sachen bewirken

    außerdem siehe hier
    wenn du cout verwendest, must du den tastaturpuffer mit fflush() oder eben endl leeren


    Aber ich kann mir beim besten Willen nicht vorstellen das ein '\n' auf eine Tastatureingabe wartet

    das hat auch niemand behauptet
    das getchar() bzw getch() oder auch das von clonk gesagte system("pause") bewirken das auf eine tasteneingabe gewartet wird

    also des nächste mal ersteinmal aufmerksam lesen
  • Routinen der conio und der iostream sollte man niemals mischen.
    Sie funktionieren auf völlig andere Weise, benutzen andere interne Puffer und handhaben Interrupts anders. Daher sind die Ergebnisse grundsätzlich unvorhersagbar. Zumindest ist das Verhalten zwischen verschiedenen Compilern anders.

    Wenn du also auf ein RETURN warten willst, geht das C++ Konform mit

    cin.ignore(9999,"\n");

    Dieser Befehl liest 9999 Zeichen von der Tastatur und bricht ab, sobald ein Newline gefunden wird. Die 9999 hat den Sinn, ebentuell noch im Puffer befindliche alte Eingaben garantiert zu überspringen.

    Und noch ein keliner Tipp am Rande: die korrekte Einbindung von Includes geht seit einigen Jahren nicht mehr über die *.h Dateien. Diese werden aus Gründen der Abwärtskompatibilität noch unterstützt, haben aber Nachteile. Das Problem ist: was passiert bei zufälligen Namensgleichheiten von eigenen Variablen / Objekten und Unterprogrammen mit denen in den System-Includes? Dazu wurden die Namensräume erfunden. Richtig sieht das so aus:

    #include <iostream>
    #inlcude <iomanip>
    using namespace std;

    In der Verwendung der Routinen aus den Includes gibt es im Normalfall keinen Unterschied.

    Grüße
    Michael