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 :

chaine de caract


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 65
    Par défaut chaine de caract
    slt tt le monde :

    SVP est ce qu'une chaine de caractére en C admet au milieu le caractére " " (espace) ?car quand j'ai déclaré ds mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char chaine[];
    scanf("%s",&chaine)
    mais quand j'ai affiché juste aprés sa lecture, il me donne juste la partie avant que je tape le caractére " "

    de plus je veux mettre des chaine de caractére dans un tableaux (c.à.d chaque case doit contenir une chaine de caratére) mais je ne sais pas comment la réaliser ?

    veuillez m'aidez SVP et merci d'avance

  2. #2
    Membre chevronné

    Homme Profil pro
    Développeur mobile iOS / Android
    Inscrit en
    Décembre 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur mobile iOS / Android
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 259
    Par défaut
    Salut

    La fonction scanf ne peut pas lire une chaine de caractéres avec une espace à l' intérieur c' est pour cela que tu as la moitié de ta chaine qui est affichée.
    La fonction scanf lit une chaine de caractères jusqu' à ce qu' elle tombe sur la fin de ligne ou une espace.

    Alors si tu veux afficher complétement ta chaine utlise la fonction gets qui lui lit une chaine de caratéres jusqu' à ce qu' elle tombe sur la fin de ligne .Remplace ta ligne de code par celle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char chaine[]// à éviter, un exemple correct de déclaration :char chaine[8];
    gets(chaine);
    IMPORTANT:quand tu déclare une chaine donne lui une taille c' est mieux!

    Si tu veux un tableau de chaine de caractères il faudrait que tu utilises
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char** tab_carac; //c'est une déclaration d'un tableau de pointure sur chaine de caractères
    tu peux afficher ton cahier de projet si tu en as? pour savoir tes attentes.
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

    N'oubliez pas de consulter les FAQ Swift, Android
    Tutoriel : Développer une application multilingue sous iOS

  3. #3
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par laracroft87 Voir le message
    SVP est ce qu'une chaine de caractére en C admet au milieu le caractére " " (espace) ?car quand j'ai déclaré ds mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char chaine[];
    scanf("%s",&chaine)
    scanf() avec le formateur %s s'arrête sur un caractère blanc (fin de ligne, espace, tabulation). Il est possible de lire une ligne avec scanf() en utilisant "%[^\n]" à la place de "%s".
    Ceci étant l'utilisation correcte de scanf() est loin d'être triviale (à lire Scanf démystifiée pour plus de détails). Pour lire une ligne complète, il est largement préférable d'utiliser fgets() (et surtout pas gets()).

    Citation Envoyé par Seelass Voir le message
    Alors si tu veux afficher complétement ta chaine utlise la fonction gets qui lui lit une chaine de caratéres jusqu' à ce qu' elle tombe sur la fin de ligne .
    Non, il ne faut pas utiliser gets() (pas de gestion de la taille max) mais bien fgets().

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 65
    Par défaut
    re

    merci a vous tous , j'ai essayé avec le gets et même avec
    scanf("%[^\n]",&chaine) et ç'a marché avec les deux mais je comprends pas la différence entre gets et fgets (c'est encore +compliqué) non !!!

    il reste celui de tab de string : j'ai déclaré char **tab[5] et char *p;
    et quand j'affecte p dans tab[i] il me signale une erreur!!
    SVP y'a t'il qqun parmi vous qui peut m'expliquer ça !!

    merci encore une fois

  5. #5
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par laracroft87 Voir le message
    mais je comprends pas la différence entre gets et fgets (c'est encore +compliqué) non !!!
    fgets() permet de limiter la taille maximale de la chaîne lue, pas gets(). fgets() permet donc, contrairement à gets() de se prémunir des débordement de buffer.

Discussions similaires

  1. [VBA excel] Extraire une chaine de caract. d'une cellule.
    Par Mourne dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 17/01/2007, 08h35
  2. Conversion chaine de caract -> flottant
    Par Blackmouse dans le forum C
    Réponses: 7
    Dernier message: 19/04/2006, 10h34
  3. Réponses: 3
    Dernier message: 05/02/2006, 22h59
  4. Réponses: 5
    Dernier message: 15/11/2005, 12h57
  5. Réponses: 10
    Dernier message: 22/05/2004, 13h51

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