UTILISATION DES TOUCHES F1-F12 DANS UN PROJET CONSOLE

D1m3x Messages postés 402 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 21 juillet 2005 - 15 sept. 2004 à 13:14
cs_manubarnum Messages postés 8 Date d'inscription samedi 30 octobre 2004 Statut Membre Dernière intervention 21 novembre 2004 - 17 nov. 2004 à 16:31
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/26179-utilisation-des-touches-f1-f12-dans-un-projet-console

cs_manubarnum Messages postés 8 Date d'inscription samedi 30 octobre 2004 Statut Membre Dernière intervention 21 novembre 2004
17 nov. 2004 à 16:31
Ben pour ce que j'y connais, voilà un petit programme simple et efficace. Merci
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
18 sept. 2004 à 13:27
ce depend de l'os utilisée, si c'est la mandrake pour xbox c'est sur

sinon ca reste un w2k light en mode reel, ca doit se faire avec des interruptions
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
18 sept. 2004 à 13:19
sur une xbox tu coderais en unix/linux ^^ assurément.
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
18 sept. 2004 à 09:16
"Je voulais dire que le C de Microsoft et Borland, possède des fonctions non standard destinées à MS-DOS et Windows"

oui, mais c'est le cas pour tout les systeme ! le c standard t'assure la portabilité du code mais chaque os possede ses propres api pour faire des appels systemes de bas niveau et assurement non portable, et surtout d'une notion beaucoup moins abstraites que le c standard

c'est pour ca que le terme "deux catégories de C" ne me semble pas aproprié

en fait il y a le c standard puis ce qui est propres a chaque os ( api pour les appels systemes)
on a donc pas seulement unix + windows borland mais tout !

comment on ferais sur une xbox par exemple ?


c'est logique que si tu touche au clavier ton code n'est plus portable puisque la notion de clavier ne l'est pas
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
18 sept. 2004 à 01:27
Kirua > Merci à toi aussi pour la précision. Je n'ai jamais travaillé sur Dev C++ ni sur GCC, ce sont des choses que j'ai lues sur le net juste pour savoir ce qui se fait ailleurs. Je n'ai jamais travaillé sur UNIX ni sur Linux non plus...

djl > J'avoue que j'ai beaucoup hésité avant d'employer le mot "catégorie" car j'ai pas trouvé un terme plus approprié. Je voulais dire que le C de Microsoft et Borland, possède des fonctions non standard destinées à MS-DOS et Windows. Ce qui rend les codes sources, contenant ces fonctions, non portables vers les autres systèmes comme UNIX. Le C du monde UNIX doit lui aussi avoir ses particularités. Quand je regarde un source pour UNIX ou Linux, je n'arrive pas à tout comprendre. Le C standard est le tronc commun pour les deux. Les compilateurs C standard ne peuvent pas s'empêcher de pénaliser l'un ou l'autre sytème d'exploitation.
A propos de getch(), si tu peux la faire facilement, je te dis BRAVO. Je pense que c'est possible à condition d'avoir les connaissances et les outils nécessaires car, d'après ce que j'ai appris, le sytème UNIX est un serveur qui communique avec des terminaux (clavier+écran) sous forme de flux (fichiers+réseau). Je peux me tromper car je n'ai aucune expérience en UNIX.
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
17 sept. 2004 à 19:04
mais on s'en fou de ca !

le c standard (ansi,iso) ne connais pas le clavier, l'ecran, ...
les i/o sont gerée avec des flux par abstraction

si tu veux toucher au clavier tu fais un appel system propre a ton os

on peut tres bien faire un getch sous les systeme unix, suffit que le peripherique clavier existe et de le coder

racpp > c'est assez confus ce que tu dis, surtout les "deux catégories de C"
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
17 sept. 2004 à 18:32
Dev-C++ est juste un EDI qui exploite (par défaut) GCC et G++, ce n'est pas un compilateur.

du reste, merci pr les précisions, j'ignorais que le clavier était considéré comme un fichier sous unix!
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
17 sept. 2004 à 16:37
djl > Pour le C standard le clavier n'existe pas. En fait il y'a deux catégories de C. Celle du monde MS-DOS+Windows et celle du monde UNIX+Linux. Dans la première (Microsoft, Borland etc), le clavier existe bel et bien grâce aux fonctions comme getch(), getche() et kbhit(). Dans la deuxième catégorie le clavier est considéré comme un fichier car le système d'exploitation UNIX est conçu ainsi. Un code contenant getch() par exemple ne peut pas être complilé pour focntionner sous un tel système. Les compilateurs GCC et DEV C++ sont standard (ANSI-C) donc ne connaissent pas le clavier. Mais quand ils sont installés sur Windows, ils peuvent utiliser les fonctions clavier en ajoutant des librairies d'émulation.
Le souce présenté ici est fait pour DOS ou Windows pas pour UNIX ou Linux.
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
17 sept. 2004 à 01:08
les constantes ? mais elles existent deja ! on renvoi le code des touches

int getch()

D1m3x > getchar lit stdin (pas le clavier), comment tu veux savoir si on a appuyé sur une touche F*
et surtout comment tu veut qu'un programme quit lit le clavier soit portable, le c ne connais pas le clavier
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
16 sept. 2004 à 07:42
pas renvoyer une char*, ça demanderait de comparer des chaînes. il vaut mieux définir des constantes:
const int kF1 = 59;
const int kF2 = 60;
...

ça permet de ne gérer que des entiers, c'est plus rapide.
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
15 sept. 2004 à 18:54
Il est vrai que "conio.h" n'est pas une librairie AINSI-C mais elle existe dans tous les compilateurs pour MS-DOS et Windows :
-Tous les compilateurs de Microsoft (Visual C++ etc).
-Tous les compilateurs de Borland (Turbo, Builder etc).
-Les compilateurs DJGPP.
Pour les autres, qui appartiennent initialement au monde UNIX , il existe des émulations:
-Dev c++: remplacer "conio.h" par "conio.c".
-LCC Win32: fichier "conio.h" téléchargeable.
Moi je ne travaille que sur DOS et Windows, c'est pour cela que j'ai un peu généralisé en disant "tous les compilateurs".
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
15 sept. 2004 à 17:04
salut,
Merci pour ces remarques mais je précise que ce source est tout à fait portable. En effet "conio.h" existe dans tous les compilateurs. J'ai utilisé "cprintf" et "getch" car ils font partie de "conio.h". La fonction getchar() n'est pas utilisable ici car elle attend l'appui sur ENTREE. Il serait inutile d'inclure "stdio.h" rien que pour printf() car cprintf() fait exactement la même chose. Ca n'a rien à voir avec la couleur. L'idée d'une fonction qui retourne un char* est bonne mais mon objectif est de rester le plus simple possible pour bien montrer le fonctionnement du code, surtout pour les débutants. Côté portabilité, je viens de le tester sur un vieux compilateur TURBO C de 1988. Il a juste suffit d'ajouter "\r" après les "\n" pour forcer le retour au début de la ligne.
D1m3x Messages postés 402 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 21 juillet 2005 1
15 sept. 2004 à 13:14
Essaye de rendre le programme un peu plus portable, déjà en utilisant le simple printf( ), pas besoin de couleur après tout... Ensuite en utilisant getchar( ) de stdio.h et ton programme sera bon :)

Tu peux également en faire une fonction par exemple, alors tu peux créer une fonction qui retourne un char * qui dira quel touche a été appuyé, donc tu fais un getchar( ) dans la fonction et tu regarde si c'est F1 alors tu écris: "F1" dans le char * etc... enfin rien que des sugestion!!!

en tout cas tu devrais le rendre portable :)

ciao ;)
Rejoignez-nous