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 dans la saisie d'un champ


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2012
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 12
    Points : 6
    Points
    6
    Par défaut Problème dans la saisie d'un champ
    a chaque fois que j'essaie de saisir le champ nom y a une erreur . merci d'avance
    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
    #include<stdio.h>
    #include<stdlib.h>
     
    typedef struct personne
    {
    	char nom[30];
    	int anneenaissance;
    	char telephone[20];
    }personne;	 
     void main()
    {
    personne*p;
     
     
     printf("saisir le nom ");
    scanf("%s",&p->nom);
     
    printf("saisir la date de naissance");
    scanf("%d",&p->anneenaissance);
    printf("saisir le telephone");
    scanf("%s",&p->telephone);
    		}

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2011
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Quel est le message d'erreur que vous obtenez ?
    Normalement ce code marche bien!

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2012
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    oui jesais qu'ilest executable mais quand je saisi le nom il est bloqué

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 137
    Points
    23 137
    Par défaut
    Citation Envoyé par Nrekcah Voir le message
    Quel est le message d'erreur que vous obtenez ?
    Normalement ce code marche bien!
    *Hum*

    nom est un char [30]. C'est donc déjà un pointeur.
    déclarer un char [30] alloue un tableau de 30 octets puis créé un pointeur vers le premier élément.

    si tu met &p->nom, tu va commencer à écrire sur ton pointeur et au-delà, c'est la SEGFAULT assurée.

    Il faut mettre scanf("%s", p->nom);

    Idem pour scanf("%s",&p->telephone);

    Ensuite pour la structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    typedef struct
    {
        char nom[30];
        int anneenaissance;
        char telephone[20];
    }personne;

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 917
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 917
    Points : 220 488
    Points
    220 488
    Billets dans le blog
    127
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    personne*p;
     
     
     printf("saisir le nom ");
    scanf("%s",&p->nom);
     
    printf("saisir la date de naissance");
    scanf("%d",&p->anneenaissance);
    printf("saisir le telephone");
    scanf("%s",&p->telephone);
    Il y a aussi le fait que 'p' soit un pointeur. Que comme tout pointeur, il faut allouer l'espace mémoire sur lequel il pointe. Cela se fait avec un malloc() ou calloc(). Il ne faudra pas oublier le free() pour libérer cette mémoire dès que l'on en a plus besoin.

    Je vous conseille chaudement la lecture des tutoriels sur le C : http://c.developpez.com/cours/?page=...urs-magistraux

  6. #6
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void main()
    {
    personne*p;
     
     
     printf("saisir le nom ");
    scanf("%s",&p->nom);
    ....
    C'est surtout parce que p est un pointeur non initialisé. Il faudrait qu'il contienne l'adresse d'une personne.

    Pour reprendre ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int main(void) // main doit renvoyer un int
    {
       personne unePersonne;      // Créer une personne
       personne * p;              // Un pointeur non initialisé
       p = &unePersonne;          // mettre l'adresse de la personne
       printf("saisir le nom ");
       scanf("%s", p->nom);        // nom est un tableau, p->nom est déjà l'adresse de départ 
    // ou 
       scanf("%s", unePersonne.nom);
     ......
       return 0;
    }

Discussions similaires

  1. Réponses: 0
    Dernier message: 22/01/2015, 13h33
  2. Problème dans une saisie de donnée
    Par 6AAAAA dans le forum Débuter
    Réponses: 5
    Dernier message: 03/02/2008, 17h37
  3. Réponses: 4
    Dernier message: 20/04/2007, 18h07
  4. [MySQL] Problème avec la saisie d'un champ
    Par zoom61 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/08/2006, 14h49
  5. [C# 2.0] Imposer un type dans la saisie d'un champ texte
    Par oodini dans le forum Windows Forms
    Réponses: 17
    Dernier message: 26/06/2006, 11h31

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