web-dev-qa-db-fra.com

Fonction alternative dans iostream.h pour getch () de conio.h?

J'essaie de maintenir l'écran sur ma sortie à l'aide du fichier d'en-tête <iostream.h>, mais je ne connais aucune fonction équivalente aux fonctions getch() & clrscr() de <conio.h> dans <iostream.h> ou à une autre bibliothèque C++. Existe-t-il de telles fonctions?

21
Aayush

Les fonctions conio.h sont des extensions de compilateur du langage et ne font pas partie de C ou C++. Il n'y a pas de remplacement direct en C++ standard.

Pour getch (), int ch = std::cin.get(); est probablement l’équivalent le plus proche - mais gardez à l’esprit que cela lira à partir de l’entrée standard mise en tampon, alors que je pense que conio.h getch fait une lecture sans tampon. 

Toute implémentation de clrscr() sera très dépendante de la plate-forme - tous les écrans ou terminaux n’ont pas une notion de compensation, et ceux qui le font ont des manières très différentes d’accéder à cette fonctionnalité. 

Si vous devez traiter le terminal comme autre chose qu'un ensemble de flux de caractères, votre meilleur choix est probablement de rechercher une bibliothèque qui cache les détails du terminal, de l'écran ou de la console sous-jacents. Si vous êtes sur un système UNIX, regardez la bibliothèque curses ou ncurses; Je ne connais aucune suggestion pour d'autres systèmes d'exploitation.

28
Stephen Veiss

getch () et clrscr () fonctionneront avec C++. Inclure conio.h

Cependant, si vous NE POUVEZ PAS (pour une raison quelconque) inclure conio.h,

que diriez-vous de cin >> dummy_var avec un message demandant à l'utilisateur d'appuyer sur entrée?

7

utilisez simplement cin.get ();

6
anonymous

C'est ce que j'utilise habituellement:

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

Il suffit d'utiliser ces deux fonctions:

fflush(stdin);
getchar();

Visual studio et Dev C++ l'incluent dans l'en-tête iostream, évitant ainsi d'inclure un fichier d'en-tête supplémentaire.

3
bkmagnetron

Réponse tardive, vous pouvez utiliser std::cin.get(), cela devrait fonctionner avec la plupart des compilateurs. Si cela ne fonctionne pas, essayez d'ajouter un autre.

int main () {

    // ...

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

Utiliser system("PAUSE") est uniquement disponible sous Windows et constitue un mauvais programmation habitude . La raison en est qu'il met littéralement en pause ou fige votre programme, au lieu d'attendre simplement une entrée. c'est à dire. une pression sur une touche pour quitter.

2
iKlsR

Je comprends que c’est une vieille question, mais je vais quand même y répondre car les gens cherchent peut-être une réponse à une question similaire.

conio.h est une bibliothèque C (ancienne) Windows et MS-DOS/PC-DOS qui était et est toujours utilisée pour la saisie et le traitement très simples au clavier en métal nu dans un environnement Windows/DOS.

getch() et clrscr() sont des ajouts non standard de cet en-tête et doivent être évités autant que possible pour les fonctions C standard. getch() peut généralement être remplacé par scanf(), fread(), en C et std::cin et std::cin.get en C++. En ce qui concerne clrscr(), le plus proche que vous puissiez obtenir est:

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

OU:

Il existe également ncurses.h sur les environnements * nix. Voici un lien à quelques informations à ce sujet.

1
Mason Watmough

La fonction getch() spécifique à la plate-forme de conio.h présente deux caractéristiques spéciales:

  • Pas d'échode caractères.
  • Unbufferedlecture de caractères.

L'écho est effectué par le terminal en dehors de l'environnement C/C++. Il ne peut être contrôlé qu'en manipulant le terminal. En outre, il est presque impossible d'obtenir des E/S sans mémoire tampon avec l'en-tête iostream.h.

Il est donc impossible de s'approcher de getch() en utilisant uniquement iostream.h.

(Il y a beaucoup d’implémentations getch(), par exemple, en utilisant termios.h pour désactiver l’écho)

0
ManuelAtWork