Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

Messages recommandés

Posté(e) (modifié)

Pour le C++, tu as raison, ce que j'ai donné, c'est du C et ce n'est pas anodin : je déconseille fortement de commencer dessus lorsque c'est le premier langage que l'on apprend.

Pour le reste, lol ... il débute, si tout de suite tu commences à parler d'optimisations, de portabilité, de la limite de scanf (enfin, du trou de sécurité que ça implique), etc ... il va vite se décourager.

Pour le getchar, il faut mieux utiliser fgetc(stdin) qui est posix (getchar n'est qu'une macro de celui ci).

Concernant les bibliothèques de DevC++, elles sont toutes portables, il faut juste penser à le configurer pour utiliser Cygwin et pas MingW (config par défaut).

Modifié par KarLKoX

Posté(e)

Ne t'inquiète pas, je parlais uniquement de portabilité parce que je ne trouvais pas de référence à kbhit() dans mes pages man ;-)

Forcément : c'est une fonction de <conio.h> (msvcrt) :-P

 

Pour le reste, tu as parfaitement raison...

Posté(e)

Allez hop, un piti kbhit() portable pour la route (code de Magnus Naeslund, mag@fbab.net)

 

#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include <termios.h>
#include <stdio.h>
#include <stdlib.h>

#ifndef TRUE
 #define TRUE 1
#endif
#ifndef FALSE
 #define FALSE 0
#endif

#define _kbhit kbhit
#define stricmp strcasecmp
#define strnicmp strncasecmp

#define Sleep(x) usleep((x)*1000)

static int            inited=0;
static struct termios ori;

static void tcatexit(){
  tcsetattr(0,0,&ori);
}

static void init_terminal(){
  struct termios t;
  tcgetattr(0,&t);
  tcgetattr(0,&ori);
  t.c_lflag &= ~(ICANON);
  tcsetattr(0,0,&t);
  atexit(tcatexit);
}

static inline int kbhit(){
 fd_set rfds;
 struct timeval tv;

  if (!inited){
  inited=1;
  init_terminal();
  }
  
  FD_ZERO(&rfds);
  FD_SET(0, &rfds);
  tv.tv_sec = 0;
  tv.tv_usec = 10*1000;
  return select(1, &rfds, NULL, NULL, &tv)>0;
}

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...