Conio.h -> getch() & clrscr()

Signaler
Messages postés
2
Date d'inscription
mardi 14 juin 2011
Statut
Membre
Dernière intervention
15 juin 2011
-
Messages postés
2
Date d'inscription
mardi 14 juin 2011
Statut
Membre
Dernière intervention
15 juin 2011
-
Bonjour,

Je me suis amuser a faire un petit programme console en c++ qui tourne très bien sous Win32. J'ai ecris ce programme avec C++ Builder et j'aimerai le faire trouner sur Linux et MacOs.

Après avoir convertie mon projet Builder en projet Code::Block sous Mac et puis sous Linux je rencontre un problème de library... En effet j'utilise dans mon programme les fonctions getch() & clrscr() et je n'arrive pas à les integrer sous Linux ou Mac car je ne trouve pas un lib conio.h ou équivalant.

je remplace bien mon getch() par un getchar() mais cela m'enléve les possibilités de controle de la touche frappée au clavier...

qq1 a t'il une solution ?

Merci par avance..


Alexandre Andrieu
http://www.icyam.com

3 réponses

Messages postés
14842
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
15 octobre 2020
92
Hello,
Conio n'est pas standard. Il faut préférer stdlib.
Pour effacer la console, essaie plutôt
system("cls");

ou
system("clear");


En quoi getchar() t'empêches de faire des contrôles?
#include <stdio.h>

int main ()
{
  char c;
  puts ("Enter text. Include a dot ('.') in a sentence to exit:");
  do {
    c=getchar();
    putchar (c);
  } while (c != '.');
  return 0;
}


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
3819
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 septembre 2020
113
Si tu pouvais éviter de faire du getch ou du clrscr, ça serait vraiment mieux...
Un terminal a vocation a écrire du texte, et c'est tout. Si tu veux maîtriser la position d'affichage, c'est une application graphique qu'il te faut (mode fenêtré ou ncurse pour du graphique console).

Néanoinms, j'avais codé un équivalent de getch pour Linux, qui devrait t'intéresser:
Le voici:
#include <termios.h>
#include 
#include <stdio.h>
#include <stdlib.h>

struct termios g_term_conf;

int unix_getch()
{
  struct termios newt;
  int ch;

  newt = g_term_conf;
  newt.c_lflag &= ~(ICANON);
  tcsetattr(STDIN_FILENO, TCSANOW, &newt);
  ch = getchar();
  tcsetattr(STDIN_FILENO, TCSANOW, &g_term_conf);
  return ch;
}

int main(void)
{
  int i = 0;
  char line[21] = {0};
  tcgetattr(STDIN_FILENO, &g_term_conf);

  printf("Hello world!\n");
  while (i < 20)
  {
    line[i] = unix_getch();
    ++i;
  }

  printf("\nLa ligne vaut %s\n", line);
  return 0;
}


Explications ici:
http://www.cppfrance.com/forum/sujet-BOUCLE-NE-MARCHE-PAS_1515714.aspx

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
2
Date d'inscription
mardi 14 juin 2011
Statut
Membre
Dernière intervention
15 juin 2011

Bonsoir,

Je vous remercie tout les deux... je vais essayer de remanier mon code sans getch() ou avec un équivalent ton équivalent sous Unix/Linux qui je le suppose doit fonctionner sous MacOs également...

Merci


Alexandre Andrieu
http://www.icyam.com