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 :

recuperation d'une chaine de caractère


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 54
    Par défaut recuperation d'une chaine de caractère
    Bonjour ,

    je débute en langage C , je tente de récuperer une info de l'utilisateur
    l'age et le nom par exemple

    je procède ainsi :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <stdio.h>
    main()
    {
      int age; 
      age = 0; 
     printf("entre ton age \n"); 
     scanf("%d", &age); 
     printf("tu as donc %d\n", age); 
     return 0
    }

    j'essaye donc de récupérer le nom de la meme façon
    en remplaçant int par char et %d par %c , mais je ne récupère que la première lettre ..
    Si quelqu'un aurais une piste .
    Cordialement

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    %c permet de récupérer un caractère. Pour récupérer un chaine, il faut utiliser %s :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char chaine[64] = "";
    scanf("%s", chaine);
    Attention, scanf n'est pas une fonction évidente à utiliser, elle peut être source de complication rapidement.


    un peu de lecture dans la FAQ : http://c.developpez.com/faq/?page=cl...buffer_clavier
    un peu de lecture à propos de scanf : http://xrenault.developpez.com/tutoriels/c/scanf/

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 54
    Par défaut
    Merci , ca fonctionne enfin ,

    Tes liens sont également très intéressant je vais m'y pencher un peu plus
    Que pourrais - je utiliser a la place de scanf ?
    Cordialement ,

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 6
    Par défaut
    A la fac, les profs nous disaient d'utiliser "fgets"
    char * fgets (char *string,int taille,FILE *stream)

    c'est un moyen sécurisé de lire une chaîne de caractères limitée.
    il est plus sécurisé que gets car il limite la longueur de la chaine lue.

    sinon un bon vieux :

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(c=getchar!=EOF)
    {
    /*ton code*/
    }
    marche aussi.

    si tu veux lire jusqua remplir un tableau tu peux aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    c[LONG_STR];
    i=0;
    while((i<LONG_STR-1)&&(c[i]=getchar!=EOF))
    {
    /*ton code*/
    i++;
    }
    c[i]='\0';
    ca va lire jusqu'à LONG_STR-1 caractères, les mettre dans le tableau et mettre le \0 final car une chaîne de caractères se termine par un \0.

  5. #5
    Expert confirmé
    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
    Par défaut
    Citation Envoyé par adcid Voir le message
    ...sinon un bon vieux :

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(c=getchar!=EOF)
    {
    /*ton code*/
    }
    marche aussi....
    Attention, c=getchar!=EOF est interprété comme c=(getchar!=EOF). Il faut mettre les parenthèses explicitement : (c=getchar)!=EOF . De plus, ne pas oublier que getchar est une fonction :
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while((c=getchar())!=EOF)
    {
    /*ton code*/
    }

  6. #6
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par kimikimi Voir le message
    Que pourrais - je utiliser a la place de scanf ?
    fgets suffit dans la plupart des cas.
    Dans mes développement, j'utilise souvent fgets pour tout. Si j'attends entier ou flottant, j'utilise derrière strtoul ou strtod.

    Sinon, encore de la lecture : Entrées solides en C
    Dernière modification par Domi2 ; 03/08/2011 à 22h32.

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 54
    Par défaut
    Merci à tous ,

    je m'y retrouve enfin , Merci pour vos explications et liens
    Cordialement ,

  8. #8
    Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 2
    Par défaut pointeur
    Salut,
    Le fait que tu ne récupères que la première lettre est tout a fait logique car la variable que tu déclares est un caractère
    Pour corriger ça tu dois déclarer la chaine de caractères comme étant un pointeur.
    exemple:
    void main()
    {
    char* st;//declare un pointeur
    st=malloc(8*sizeof(char));//alloue la taille ici on lui donne 8 fois la taille dun caractere
    printf("enter un chaine:\n");
    scanf("%s",st);//recupre l'adresse du pointeur
    printf("vous avez ecrit:%s \n",st);//resultat

    }
    ça doit marcher alors.
    sinon tu dois déclarer un tableau de caractères, mais c'est peu pratique.

  9. #9
    Expert confirmé
    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
    Par défaut
    1-
    Citation Envoyé par albert.system Voir le message
    ...
    Pour corriger ça tu dois déclarer la chaine de caractères comme étant un pointeur.
    On ne peut dire cela : une chaine de caractères n'est pas un pointeur mais un tableau.

    2- Sur le code :
    - Pourquoi préconiser une allocation dynamique du tableau ?
    - main() renvoie un int
    - sizeof(char) vaut 1 par définition.
    - Commentaire faux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scanf("%s",st);//recupre l'adresse du pointeur
    - Il manque la libération de la mémoire allouée.

    3-
    sinon tu dois déclarer un tableau de caractères, mais c'est peu pratique.
    Pourquoi ?

Discussions similaires

  1. [MySQL] comment recuperer une chaine dans une chaine de caractère
    Par Danyblue dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 12/09/2012, 16h19
  2. Réponses: 4
    Dernier message: 20/11/2008, 15h16
  3. Recuperer une valeur dans une chaine de caractére
    Par manouk dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/07/2008, 14h57
  4. Réponses: 2
    Dernier message: 19/06/2007, 16h37
  5. recuperer partie d'une chaine de caractère
    Par kain31 dans le forum C++
    Réponses: 8
    Dernier message: 12/04/2007, 12h06

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