it-swarm.com.de

Alternative Funktion in iostream.h für getch () von conio.h?

Ich versuche, den Bildschirm in meiner Ausgabe mit der Header-Datei <iostream.h> zu halten, aber ich kenne keine äquivalente Funktion zu den getch() & clrscr()-Funktionen von <conio.h> in <iostream.h> oder einer anderen C++ - Bibliothek. Gibt es solche Funktionen?

21
Aayush

Die conio.h-Funktionen sind Compilererweiterungen für die Sprache und nicht Teil von C oder C++. In Standard C++ gibt es keinen direkten Ersatz.

Für getch () ist int ch = std::cin.get(); wahrscheinlich das nächste Äquivalent. Beachten Sie jedoch, dass dies aus gepufferten Standardeingaben gelesen wird, während ich denke, dass conio.h getch ein ungepuffertes Lesen ausführt. 

Jede Implementierung von clrscr() wird sehr plattformabhängig sein. Nicht alle Bildschirme oder Terminals haben ein Clearing-Konzept und diejenigen, die stark unterschiedliche Zugriffsmöglichkeiten auf diese Funktionalität haben. 

Wenn Sie das Terminal als etwas anderes als eine Reihe von Zeichenströmen behandeln müssen, suchen Sie am besten nach einer Bibliothek, die die Details des zugrunde liegenden Terminals, Bildschirms oder der Konsole vor Ihnen verbirgt. Wenn Sie mit einem UNIX-System arbeiten, schauen Sie sich die Curses- oder Ncurses-Bibliothek an. Ich kenne keine Vorschläge für andere Betriebssysteme.

28
Stephen Veiss

getch () und clrscr () funktionieren mit C++. Conio.h einschließen

Wenn Sie jedoch KEINE (aus irgendeinem Grund) conio.h einschließen können,

wie wäre es mit cin >> dummy_var mit einer Displaynachricht, die den Benutzer auffordert, die Eingabetaste zu drücken?

7

benutze einfach cin.get ();

6
anonymous

Das verwende ich normalerweise:

#include<iostream>
...
std::getchar();
3
CLearner

Verwenden Sie einfach diese beiden Funktionen:

fflush(stdin);
getchar();

Visual Studio und Dev C++ enthalten dies in ihrem iostream-Header, sodass keine zusätzliche Header-Datei eingefügt werden muss.

3
bkmagnetron

Späte Antwort, Sie können std::cin.get() verwenden. Dies sollte mit den meisten Compilern funktionieren. Wenn dies nicht funktioniert, fügen Sie einen anderen hinzu.

int main () {

    // ...

    std::cin.get();
    std::cin.get();
    return 0x00;
}

Die Verwendung von system("PAUSE") ist nur unter Windows verfügbar und ist eine bad programming habit . Der Grund dafür ist, dass das Programm buchstäblich pausen oder freezes ist, anstatt nur auf eine Eingabe zu warten. dh. ein Tastendruck zum Beenden.

2
iKlsR

Ich verstehe, dass dies eine alte Frage ist, aber ich werde trotzdem antworten, weil die Leute nach einer Antwort auf eine ähnliche Frage suchen.

conio.h ist eine (alte) Windows- und MS-DOS/PC-DOS-C-Bibliothek, die für sehr einfache Bare-Metal-Tastatureingaben und deren Handhabung in einer Windows/DOS-Umgebung verwendet wurde und immer noch verwendet wird.

Sowohl getch() als auch clrscr() sind nicht standardmäßige Zusätze in diesem Header und sollten für die Standard-C-Funktionen möglichst vermieden werden. getch() kann normalerweise durch scanf(), fread(), in C und std::cin und std::cin.get in C++ ersetzt werden. In Bezug auf clrscr() können Sie am nächsten kommen:

for(int i = 0; i < 100; i++)
{
    printf("\n");
}

ODER:

Es gibt auch ncurses.h in * nix-Umgebungen. Hier ist ein Link zu einigen Infos dazu.

1
Mason Watmough

Die plattformspezifische Funktion getch() von conio.h hat zwei Besonderheiten:

  • Kein Echo vonvon Zeichen.
  • UnbufferedLesen von Zeichen.

Das Echo wird vom Terminal außerhalb der C/C++ - Umgebung ausgeführt. Es kann nur durch Manipulation des Terminals gesteuert werden. Mit dem Header iostream.h ist es nahezu unmöglich, ungepufferte E/A zu erhalten.

Daher ist es nicht möglich, mit iostream.h alleine in die Nähe von getch() zu gelangen.

(Es gibt viele getch()-Implementierungen, zum Beispiel die Verwendung von termios.h, um das Echo zu deaktivieren.)

0
ManuelAtWork