IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

saisie au clavier


Sujet :

MFC

  1. #1
    Membre éprouvé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Par défaut saisie au clavier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    int n;
     
    do
    {
        n=a.GetCh();//ma fonction getch renvoi un int depuis le clavier 
                           //"a" est un objet console win32
        switch (n)
    	{
    	case 8:break; //cette ligne n'est pas tres importante
    	default:a.Printf("%c",n);break;
    	//j'utilise ma fonction Printf 
                    //fonction qui ressemble aux  
                    //fonctions C elle a l'avantage
                    //de me permettre de lire 
                    //n'importe quel type de données
                    //facilement (%i %c %f etc...)
                    }
    }while(n!=13 &&n!=27);
    mon probleme est le suivant:
    je voudrais utiliser un char* (j'aurai aimé travailler avec string mais le type est imposé) que j'allouerai dynamiquement et qui se concatenerai a chaque fois au n qui reçoit mon a.Getch() (strcat()) mais je ne sais pas comment faire est ce qu'il faut a chaque fois realouer de l'espace pour mon char*??? genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char* chaine = "";
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    chaine= new char[strlen(chaine)+1];
    strcat(chaine,n);
    je ne sais pas si je suis assez clair...?

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Salut
    Réallouer à chaque fois me parrait couteux. Tu pêux allouer à chaque fois le double de la longueur précédente.
    Ce que tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    chaine= new char[strlen(chaine)+1];
    strcat(chaine,n);
    est faux et planterait car tu alloues la longueur de chaîne normale (compte tenu du zéro terminal) puis tu concatènes avec un entier !?, donc même si tu concaténais avec une chaîne celà serait incorrect car ta chaîne allouée serait trop courte.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre éprouvé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Par défaut
    merci d'avoir repondu
    Réallouer à chaque fois me parrait couteux. Tu pêux allouer à chaque fois le double de la longueur précédente.
    ta solution l'est encore plus...je pense avoir ma compris...
    puis tu concatènes avec un entier !?
    dsl mon code devient donc apres correction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    #include <stdlib.h> //pour itoa()
     
    int n; 
    char* ma_chaine= "";
    char* temp= ""; // temp servira pour itoa()
     
    do 
    { 
        n=a.GetCh();//ma fonction getch renvoi un int depuis le clavier 
                           //"a" est un objet console win32 
        switch (n) 
       { 
       case 8:break; //cette ligne n'est pas tres importante 
       default:a.Printf("%c",n);break; 
       //j'utilise ma fonction Printf 
                    //fonction qui ressemble aux  
                    //fonctions C elle a l'avantage 
                    //de me permettre de lire 
                    //n'importe quel type de données 
                    //facilement (%i %c %f etc...) 
                    ma_chaine= new char[strlen(ma_chaine)*2];
    	strcat(ma_chaine,itoa(n,temp,2));
                    } 
    }while(n!=13 &&n!=27);
    Mais ça ne marche toujours pas j'ai des problemes au niveau de l'execution...quelqu'un saurait t'il d'ou viens mon probleme et surtout comment y remedier?
    merci pour toutes vos contributions

  4. #4
    Membre éprouvé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Par défaut
    c'est bon je pense avoir resolu le probleme
    le truc qui clochait venait de la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strcat(ma_chaine,itoa(n,temp,2));
    en effet je pense que le troisieme parametre de itoa() ici 2 est le nombre d'octect sur lesquels va etre codé le resultat de la concatenation
    il faut donc l'augmenter.
    La ligne suivante est pas consequent juste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ma_chaine= new char[strlen(ma_chaine)+1];
    si vous avez des infos sur itoa() ça serai cool de me renseigner ( j'ai pas de msdn pas assez d'espace disq)
    et si vous avec des questions n'hesitez pas
    s'il n'ya pa de problemes je metterai le post resolu demain
    merci a tous 8) 8) 8) 8)

  5. #5
    Membre éprouvé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Par défaut
    char *itoa (int VAL, char *CH, int B)

    itoa convertit VAL dans une chaîne de caractères terminée par '\0' et attribue le résultat à CH; itoa retourne CH comme résultat. B est la base utilisée pour la conversion de VAL. B doit être compris entre 2 et 36 (inclus). (Réservez assez de mémoire pour la chaîne résultat: itoa peut retourner jusqu'à 17 bytes.)

  6. #6
    Membre éprouvé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Par défaut
    ça se compile tres bien
    pas de probleme au niveau de l'execution
    mais ça donne n'importe koi niveau resultats
    quand j'affiche ce que j'ai lu au clavier ça me donne du n'importe quoi genre:

    yyyôiûôiôuîoûoûIII312

    help les pros du c++ j'ai reelement besoin d'aide

  7. #7
    Membre éprouvé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Par défaut
    j'ai utilisé finalement une string et c'est bcp plus facile
    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] mémoriser les caractères saisis au clavier
    Par tiboleo dans le forum Windows Forms
    Réponses: 1
    Dernier message: 04/06/2006, 12h25
  2. Verifier la saisie au clavier
    Par julrock dans le forum C++
    Réponses: 1
    Dernier message: 05/04/2006, 07h41
  3. Probleme validation saisis au clavier...
    Par angelevil dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 15/03/2006, 13h51
  4. Parser une ligne saisie au clavier.
    Par Sylmandel dans le forum C++
    Réponses: 5
    Dernier message: 17/10/2005, 10h12
  5. Affichage d'une chaîne saisie au clavier
    Par Frenchghost dans le forum Assembleur
    Réponses: 17
    Dernier message: 29/12/2004, 13h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo