C en Console, saisis à la volée et reconnaissance des caractères frappés (getch(

Résolu
cs_luckyalan Messages postés 24 Date d'inscription jeudi 19 février 2009 Statut Membre Dernière intervention 8 janvier 2014 - 22 juin 2009 à 17:07
cs_luckyalan Messages postés 24 Date d'inscription jeudi 19 février 2009 Statut Membre Dernière intervention 8 janvier 2014 - 22 juin 2009 à 19:00
 Bonjour je  rebebute en C EN CONSOLE après 20 ans d'arret. (avec le tuto de [mailto:m@teo m@teo])
je n'arrive plus à faire les lignes de code permettant de saisir à la volée 50*20 et que le programme stocke 50 et 20 dans 2 variables et reconnaisse que * correspond à "mulptiplier"
pour l'instant je mets 50 dans une variable avec scanf, puis j'utilise getch() pour entrer le signe de l'opération, mais je voudrais que le programme permette à l'utilisateur de saisir au clavier sans se poser de question
(pour info ci-dessous mon bout de code qui marche mais ne correspond pas à ce que j'aimerai)
merci à tous
#include

<stdio.h>#include

<stdlib.h>#include

<string.h> 

int

main(
int argc,
char *argv[]){

int total=0, sousTotal=0, nb1=0, nb2=0, nb3=0;

char action=
' ';

//CALCULETTEprintf(

"saisis le nb1 entre 1 et 100\n");scanf(

" %ld",&total);
while

(action!=27){

printf(

"quelle operation ?\n");action=getch();

// ca recupere la saisie d'une seule touche SANS faire ENTREE printf (

" nombre initial = %ld, et l operation est %c \n",total, action);

switch (action){

case 42:
// le symbole ASCII correspond à * printf(

"TU VEUX MULTIPLIER PAR COMBIEN ? \n");scanf(

" %ld",&nb2);total = total*nb2;

printf (
" nouveau total ancien total*nb2, donc total %ld\n", total);

break;

case 43:
// le symbole ASCII correspond à +printf(

"TU VEUX AJOUTER COMBIEN ? \n");scanf(

" %ld",&nb2);total = total+nb2;

printf (
"nouveau total ancien total+nb2, donc total %ld\n", total);

break;

case 27:
// le symbole ASCII correspond à ESC, c'est à dire ECHAPprintf (

"\n\n\n TU AS FAIT ECHAP Merci, au revoir\n\n\n");

break;

case 48:
// le symbole ASCII 48 correspond au chiffre 0printf (

"\n\n\n tu as saisi 0 pour que je remettre le compteur à zero,");printf (

"\n OK, tu peux redemarrer une opération si tu veux\n\n"); total = 0;

break;

// Alex, à toi de continuer : - correspond à 45, / correspond à 47, etc...}

}

system (

"PAUSE");
return

0;
/* le prog renvoie 0 puis s'arrete*/}

quand on veut on peut

4 réponses

debutant VB Messages postés 93 Date d'inscription lundi 3 juillet 2006 Statut Membre Dernière intervention 25 juin 2010
22 juin 2009 à 17:26
Je n'ai pas tout compris pour ce que tu attendais ("je voudrais que le programme permette à l'utilisateur de saisir au clavier sans se poser de question" --> c'est à dire ?)
Le code suivant peut-il t'aider ?

#include <stdio.h>
#include <stdlib.h>

int Operation(char, int, int);

int main(void)
{
    char OpType; int Op1, Op2;
    printf("Operation : ");
    scanf("%ld", &Op1);
    scanf("%c", &OpType);
    scanf("%ld", &Op2);
    printf("\nResultat : %ld.\n", Operation(OpType, Op1, Op2));
    system("PAUSE");
    return 0;
}

int Operation(char OpType, int Op1, int Op2)
{
    switch (OpType)
    {
        case '*':
            return Op1 * Op2;
        case '+':
            return Op1 + Op2;
        // etc ...
        default:
            break;
    }
    return 0;
}
3
debutant VB Messages postés 93 Date d'inscription lundi 3 juillet 2006 Statut Membre Dernière intervention 25 juin 2010
22 juin 2009 à 18:20
Je ne l'ai pas vraiment regardé, mais un code de ce genre : http://www.cppfrance.com/codes/EVALUATEUR-EXPRESSION_37828.aspx   fonctionnerait sans doute à partir d'un tableau de caractères créé grâce à getch() (fonction evaluer_expression(cTab)).
Sinon, je pense que tu pourras peut-être trouver ce qu'il te faut en recherchant quelque chose du genre "C++ évaluer expressions" (par exemple : http://www.cppfrance.com/codes/ALGORITHME-EVALUER-EXPRESSIONS-ARITHMETIQUES_47952.aspx), mais bon, je ne suis qu'un débutant en C++ (comme l'indique mon pseudo que je n'ai toujours pas pu changer ... ;)), donc je me trompe peut-être (j'essaye juste d'aider mais j'y arrive très rarement ^^).
NB: Il est important de valider le "Réponse acceptée !" une fois qu'on a répondu à ta question, mais ne le mets pas si je n'y ai pas répondu !
(ça incite les personnes à ne pas regarder le sujet - car soit-disant clos)
3
cs_luckyalan Messages postés 24 Date d'inscription jeudi 19 février 2009 Statut Membre Dernière intervention 8 janvier 2014
22 juin 2009 à 17:50
merci de m'avoir répondu.
cela ne correspond pas à ce que je recherche et que j'ai un peu de difficulté à exprimer, je réessaye :
je voudrais qu'on saisisse au clavier (sans arrêter) "50*20=" et que le programme reconnaisse le chaque caractère et transforme la saisie en 2 variables (op1 = 50, op2=20) et retourne 50*20=1000 (evidemmment c'est un exemple) ce que je veux c'est qu'à chaque frappe le prog analyse. avec getch() c'est possible, mais je ne sais pas comment lui faire enregistrer 5,0,*,2,0,= et transformer tout ca en 50*20=1000

quand on veut on peut
0
cs_luckyalan Messages postés 24 Date d'inscription jeudi 19 février 2009 Statut Membre Dernière intervention 8 janvier 2014
22 juin 2009 à 19:00
merci "debutant VB" et bien tu vois que tu peux rendre service, toi qui en doutais.
Le lien http://www.cppfrance.com/codes/ALGORITHME-EVALUER-EXPRESSIONS-ARITHMETIQUES_47952.aspx contient toutes les réponses à mes questions, et ne sachant pas "ce que je cherchais" je ne l'aurai jamis trouvé sans ton aide.
merci infiniment à toi ! ;o))
bon, va falloir que je bosse maintenant c'est trouvé, mais c'est pas gagné.
Amitiés
Alain

quand on veut on peut
0
Rejoignez-nous