simulation de touches

simulation de touches - C - Programmation

Marsh Posté le 21-01-2010 à 20:13:38    

Bonjour,

 

J'ai un fichier avec des données, qui à l'ouverture du programme sont stockés dans un tableau de structures, dymanique biensûr :)

 

Dans mon menu j'ai l'option "Modifier", là encore j'ai pas envie de mettre un autre menu pour choisir quelle "proprieté / attribut" modifier, donc j'ai une boucle qui passe sur tous les attributs et on peut entrer les nouvelles informations.

 

Or on veut pas forcément tout supprimer, j'ai pensé au début à un truc du style clients ftp/ssh
Entrez le prénom (Jacques) :
Si l'on entre quelque chose la valeur précedente est écrasée sinon elle est gardée.
Mais trop de problèmes avec C qui n'aime pas la concaténation de caractères/chaines et qui ne me laisse pas mettre les paranthèses :
printf("Entrez un prénom %s",!strcmp(mode,"modifier" ) ? "stagiaires[i].prenom" : "" );
impossible de mettre les paranthèses à moins de les ajouter manuellement avec davantages d'instructions et de conditions une/paranthèse.

 

J'ai donc repensé et imaginé comme suit :
Entrez un prénom : Jacques
Sachant que Jacques est modifiable, que l'utilisateur peut la supprimer ou juste taper entrée pour qu'elle constitue le "stdin' prochain.

 

Comment aboutir à cela ? Des simulations de touches en parcourant toute la chaine ? ou y'a un moyen plus facile ?

 

Illuminez mes idées  :jap:  merci d'avance.


Message édité par Nethacker le 22-01-2010 à 02:57:28
Reply

Marsh Posté le 21-01-2010 à 20:13:38   

Reply

Marsh Posté le 22-01-2010 à 16:29:46    

UP

Reply

Marsh Posté le 22-01-2010 à 16:37:09    

alors première remarque : en C, on évite d'utiliser des chaines pour faire des énumérations. Vraisemblablement, ton mode devrait probablement plutôt être un enum.
 
Ensuite, il n'y a aucun problème à construire ta chaine avant de la sortir via une combo de snprintf et de puts
 
l'opérateur ternaire est sympa, mais je pense que, dans ton cas, tu aurais plutôt intérêt à faire un truc du style.
 
Si tu veux effectivezment afficher le prénom et que l'utilisateur puisse le remplacer (en pressant backspace pour effacer l'entrée), alors tu vas devoir utiliser quelque chose de plus élaboré que ca. Je te rappelle que le standard C ne connait pas de console directement et que rien ne te garantit que ta sortie n'est pas redirigée dans un fichier.
 
Cela dit, tu peux toujours regarder du côté des ncurses, tu auras peut-être des fonctions qui répondront mieux à tes attentes


---------------
last.fm
Reply

Marsh Posté le 22-01-2010 à 17:58:02    

theshockwave a écrit :

alors première remarque : en C, on évite d'utiliser des chaines pour faire des énumérations. Vraisemblablement, ton mode devrait probablement plutôt être un enum.

 

Ensuite, il n'y a aucun problème à construire ta chaine avant de la sortir via une combo de snprintf et de puts

 

l'opérateur ternaire est sympa, mais je pense que, dans ton cas, tu aurais plutôt intérêt à faire un truc du style.


Merci de m'avoir confirmé qu'une composition de sprintf le tout dans puts n'est pas du tout louche  [:nethacker:1]

theshockwave a écrit :


Si tu veux effectivezment afficher le prénom et que l'utilisateur puisse le remplacer (en pressant backspace pour effacer l'entrée), alors tu vas devoir utiliser quelque chose de plus élaboré que ca. Je te rappelle que le standard C ne connait pas de console directement et que rien ne te garantit que ta sortie n'est pas redirigée dans un fichier.

 

Cela dit, tu peux toujours regarder du côté des ncurses, tu auras peut-être des fonctions qui répondront mieux à tes attentes


En fait,"Jacques" est modifiable, après un backspace, seul "s" est ôtée, et si l'on appuie sur Entrée, "Jacque" est envoyé au buffer. une idée ? Sinon je vais voir du côté de ncurses.

Message cité 1 fois
Message édité par Nethacker le 22-01-2010 à 17:58:13
Reply

Marsh Posté le 23-01-2010 à 23:42:27    

Nethacker a écrit :


En fait,"Jacques" est modifiable, après un backspace, seul "s" est ôtée, et si l'on appuie sur Entrée, "Jacque" est envoyé au buffer. une idée ? Sinon je vais voir du côté de ncurses.


 
Je ne connais pas de lib qui fasse ca (ca ne veut pas dire qu'il n'y en a pas, c'est juste que, personnellement, le mode terminal/console, je n'y touche pas trop) mais à refaire à la mano, ca doit pas être la mer à boire non plus. Juste lire les entrées caractère par caractère et gérer leur impact sur ta chaine modifiable en interne, raffraichissant juste la modif. A nouveau, pour faire ca, les curses/ncurses devraient te fournir ce dont tu as besoin pour le mettre en place.


---------------
last.fm
Reply

Marsh Posté le 24-01-2010 à 00:20:16    

Merci theshockwave, J'apprécie ton aide.

Reply

Marsh Posté le 24-01-2010 à 15:07:20    

Regarde la lib de GNU qui gère l'historique (readline si j'ai bonne mémoire) et ses équivalents ailleurs (il y en a au moins une sous license BSD).


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 08-02-2010 à 16:20:16    

Merci je vais voir :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed