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

C Discussion :

problème de saisie


Sujet :

C

  1. #1
    Membre éclairé Avatar de lastrecrue
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    360
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 360
    Par défaut problème de saisie
    voici mon code il y a un problème c'est que pour passe du choix avec les touche directionnelle a la saisie de nom et autre je dois appuyer 2 fois sur entrer des fois plus je veux savoir a quoi est du ce problème est qu'elle est la solution


    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    #include <stdio.h>
    #include<conio.h>
     
    int x=0;
    typedef struct adherents
    {
    	long num_adh;
    	char nom[21];
    	char prenom[21];
    	char adresse[151];
    	long tel;
    	char categorie;
    }adh;
     
    char choix_categorie()
    {
    int i,y;
    char mn[3][20]={"Etudiant","Prof","Administrateur"};
    for (i=0; i<3;i++)
    {
    	if (i==x)
    		textbackground(6);
    	gotoxy(30,6+i);
    	cprintf("%s\n",mn[i]);
    	textbackground(9);
    }
    do
    {
    	y=getch();
    	if (y==0)
    		y=getch();
    	switch (y)
    	{
    		case 80:if (x<2)
    				x+=1;
    			else
    				x=0;
    			choix_categorie();break;
    		case 72:if (x==0)
    				x=2;
    			else
    				x-=1;
    			choix_categorie();break;
    		case 13:
    			switch (x+1)
    			{
    				case 1:return ('E');
    				case 2:return ('P');
    				case 3:return ('D');
    			}
    	}
    }
    while (!0);
    }
     
    void ajout_adh(adh *adh)
    {
    clrscr();
    gotoxy(30,2);cprintf("Saisie d'un adherent");
    gotoxy(5,6);printf("choix categorie    :");
    gotoxy(5,10);printf("donner Nø adh      :");
    gotoxy(5,12);printf("donner le nom      :");
    gotoxy(5,14);printf("donner le prenom   :");
    gotoxy(5,16);printf("donner l'adresse   :");
    gotoxy(5,18);printf("donner le Nøde tel :");
    gotoxy(30,6);adh->categorie=choix_categorie();
    gotoxy(30,10);scanf("%ld",adh->num_adh);flushall();
    gotoxy(30,12);gets(adh->nom);
    gotoxy(30,14);gets(adh->prenom);
    gotoxy(30,16);gets(adh->adresse);
    gotoxy(30,18);scanf("%ld",adh->tel);
    }
     
    void main()
    {
    adh *adh;
         ajout_adh(adh);
         getch();
    }

  2. #2
    Membre chevronné
    Avatar de joellel
    Profil pro
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Par défaut
    Avant tout, résous le problème d'allocation de mémoire: tu n'as pas de place réservée pour ta structure adh:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    adh adher;
    ajout_adh( &adher);

  3. #3
    Membre confirmé

    Inscrit en
    Avril 2004
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 78
    Par défaut
    ou alors si tu veux vraiment utiliser un pointeur :

    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
    void ajout_adh(adh **adh)
    {
    clrscr();
    gotoxy(30,2);cprintf("Saisie d'un adherent");
    gotoxy(5,6);printf("choix categorie    :");
    gotoxy(5,10);printf("donner Nø adh      :");
    gotoxy(5,12);printf("donner le nom      :");
    gotoxy(5,14);printf("donner le prenom   :");
    gotoxy(5,16);printf("donner l'adresse   :");
    gotoxy(5,18);printf("donner le Nøde tel :");
    gotoxy(30,6);(*adh)->categorie=choix_categorie();
    gotoxy(30,10);scanf("%ld",(*adh)->num_adh);flushall();
    gotoxy(30,12);gets((*adh)->nom);
    gotoxy(30,14);gets((*adh)->prenom);
    gotoxy(30,16);gets((*adh)->adresse);
    gotoxy(30,18);scanf("%ld",(*adh)->tel);
    }
     
    void main()
    {
    adh *adh;
         ajout_adh(&adh);
         getch();
    }
    Le parametre adh de la fonction ajout_adh doit etre par reference et non par valeur si tu veux que les changements de ce parametre soit gardes apres l apelle de cette fonction. C est a dire tu dois agir directement sur l adresse de adh.

    Un petit conseil : tu devrai ne pas utiliser le meme nom pour le type de la variable et le nom de la variable.
    A ta place je mettrai ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    typedef struct adherent
    {
    	long num_adh;
    	char nom[21];
    	char prenom[21];
    	char adresse[151];
    	long tel;
    	char categorie;
    }adherent_t;

  4. #4
    Membre éclairé Avatar de lastrecrue
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    360
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 360
    Par défaut
    je crois que j'ai pas ce problème de passage par adresse car j'ai coupé quelque portion du code puisque je mes après saisi mes variable dans un tableau adhèrent qui' est variable globale. mais je ne sais toujours pas d'où viens le problème car que je choisi avec la liste déroulante la catégorie je doit appuyer 2 fois sur entrer pour que ça valide le choix

  5. #5
    Membre chevronné
    Avatar de joellel
    Profil pro
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Par défaut
    Envoie le VRAI code alors

  6. #6
    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
    Tes problèmes viennent sans doute du fait que tu utilises scanf.
    Enlève-les pour mettre à chaque fois fgets(buf, sizeof buf, stdin); ça devrait mieux fonctionner.

    D'autre part, gets est un bug bien connu qu'il ne faut absolument pas utiliser.
    Enfin le prototype de main n'a jamais été mais tu peux écrire et tu mets un avant la dernière accolade. AMHA, tu ferais bien de changer de bouquin de C.
    "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

  7. #7
    Membre éclairé Avatar de lastrecrue
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    360
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 360
    Par défaut
    salut le bug de gets je sais le résoudre, mais le problème c'est que je doit mettre plusieurs fois entrer dan la liste a flèche.
    si non une documentation sur utilisation fprintf() me seras très utiles.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Par défaut
    tu n'aurais pas quelque chose qui reste dans ton buffer ?

  9. #9
    Membre éprouvé
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Par défaut
    Citation Envoyé par lastrecrue
    salut le bug de gets je sais le résoudre
    la resolution du probléme passe par le fait de ne PAS utiliser gets mais fgets.

    Citation Envoyé par lasterecrue
    si non une documentation sur utilisation fprintf() me seras très utiles.
    http://man.developpez.com/ ...

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

Discussions similaires

  1. problème de saisie
    Par youp_db dans le forum C
    Réponses: 3
    Dernier message: 20/07/2006, 13h08
  2. [TMaskEdit] Problème de saisie de date
    Par Pill_S dans le forum Delphi
    Réponses: 4
    Dernier message: 10/07/2006, 16h36
  3. Richeditctrl - problème de saisie clavier
    Par KO-Tek dans le forum MFC
    Réponses: 5
    Dernier message: 20/12/2005, 11h15
  4. Problème de saisie de caractères
    Par XantaX dans le forum Assembleur
    Réponses: 3
    Dernier message: 07/12/2005, 15h37
  5. Problème de saisie avec le "."
    Par Pouf dans le forum ASP
    Réponses: 10
    Dernier message: 18/03/2005, 15h27

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