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 :

La taille d'une chaîne de caractères


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 14
    Points : 16
    Points
    16
    Par défaut La taille d'une chaîne de caractères
    Salut,
    Voilà je suis nouvelle dans le forum. J'ai vraiment besoin de votre aide.
    Je sais qu'il existe un fonction dans la bibliotèque standard strlen pour déterminer le nombre des caractère dans une chaine de caractère.
    Mais dans ce code j'essaie à créer une code qui effectue la même tâche sauf que ça ne marche pas.
    J'aimerais savoir alors où se trouve le problème en exacte.
    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int fctTaille(const char* mot); // le prototype de la fonction qui calcule la taille d'une chaine de caractères
     
    int main()
    {
        char motSaisi[100]; // la déclaration d'un tableau de caractères dont le maximum est supposé être 100
     
        scanf("%s", motSaisi); // l'utilisateur doit rentrer une chaine de caracteres
        printf("le nombre des lettres est : %d", fctTaille(motSaisi)); // supposé à avoir la tâche de montrer le nombre des caractères
     
        return 0;
    }
    int fctTaille(const char* mot) // la fonction qui doit normalement calculer le nombre des caractères
    {
     
        int i=0;
        while(mot[i]!='\0'); // sachant que toute chaine de caractère se termine par \0 , on impose l'entrée dans la boucle tant que la chaine de caractère n'a pas abouti sa fin
        {i++;} // l'ensemble des instructions ( ici, une seule ) lors de l'entrée dans la boucle
        return i; // le nombre finale après toute incrémentation possible
    }

    Merci bcp d'avance!
    j'en serai reconnaissante!

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Salut

    Dans cette boucle while, le point-virgule est en trop ; il se comporte comme une instruction qui ne fait rien. Par conséquent, "i" n'est jamais modifié et il y a boucle infinie.

    Il faut retirer le point-virgule.

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 14
    Points : 16
    Points
    16
    Par défaut
    Ah merci! ça marche bien maintenant!
    Mais j'ai d'autre question..
    En tapant par exemple : " la laaala " , je m'attendais à ce qu'on me compte les guillemets, les espaces + les lettres. mais le résultat est : 1 . Pourquoi?
    J'ai une autre question.
    En quoi consiste la différence entre :
    int fctTaille(const char* mot)
    et
    int fctTaille(char mot[]) ( je l'ai essayé et ça marche comme dans l'autre cas)

    Merci encore!

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par looking_4truth Voir le message
    Ah merci! ça marche bien maintenant!
    Mais j'ai d'autre question..
    En tapant par exemple : " la laaala " , je m'attendais à ce qu'on me compte les guillemets, les espaces + les lettres. mais le résultat est : 1 . Pourquoi?
    Parce que scanf("%s") s'arrête au premier espace et laisse le reste dans le tampon clavier. Faut savoir que, contrairement à ce qui est expliqué aux débutants, scanf() n'est pas fait pour les saisies clavier parce que scanf() attend une entrée formatée et que ce que tape l'utilisateur derrière son écran est tout sauf formaté.

    Exemple
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int main()
    {
        int i;
        char nom[10];
     
        printf("Saisie nombre:\n");
        scanf("%d", &i);
        printf("vous avez saisi [%d]\n", i);
     
        printf("Saisie nom:\n");
        scanf("%s", nom);
        printf("vous avez saisi [%s]\n", nom);
    }

    Tu verras que seule la saisie n° 1 fonctionnera. Parce que le "return" que tu tapes n'est pas consommé par le premier scanf (on lui dit de récupérer du chiffre donc il ne récupère que ce qui est chiffre) et il reste donc dans le tampon clavier jusqu'à ce que le second scanf() le récupère sans te laisser le temps de taper quoi que ce soit.

    La bonne façon de faire une saisie de nombre est la suivante
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <stdio.h>
    int main()
    {
        char zone[1024];
        int nbr;
     
        printf("Saisie nombre:\n");
        fgets(zone, 1024, stdin);
        if (sscanf(zone, "%d", &nbr) != 1)
        {
              printf("Vous n'avez pas saisi un nombre correct\n");
              ...
        }
    }
    Là, la saisie fgets() récupère tout le texte tapé quel qu'il soit. Il disparait donc du tampon clavier (ce qui évite de polluer la saisie suivante). Et si le sscanf n'arrive pas à récupérer la variable numérique (il renvoie le nombre de variables correctement remplies), alors la saisie est incorrecte. Et c'est facilement adaptable à tout type de saisie...

    Citation Envoyé par looking_4truth Voir le message
    J'ai une autre question.
    En quoi consiste la différence entre :
    int fctTaille(const char* mot)
    et
    int fctTaille(char mot[]) ( je l'ai essayé et ça marche comme dans l'autre cas)
    Aucune. Un tableau en 1D est équivalent à un pointeur. Voir à ce sujet une explication plus complète ici http://www.developpez.net/forums/d96...appel-fonction

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 195
    Points : 115
    Points
    115
    Par défaut
    Bonjour !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Aucune. Un tableau en 1D est équivalent à un pointeur.
    Un tableau 1D est radicalement different d'un pointeur. La source de confusion vient du fait que les compilateurs C passe leur tableau 1D par l'intermediaire de l'addresse du premier element.ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int fctTaille(const char* mot)
    et
    int fctTaille(char mot[])
    la variable temporaire a la fonction qui va accueillir mot sera un pointeur vers le premier element de mot.

    Pour vous en convaincre il est tres facile de tester ceci :

    fichier1.cpp
    fichier2.cpp
    le tab du fichier 2 indique que la definition de tab se trouve dans un autre fichier ici le fichier 1. Sauf que le compilateur vous le dira les deux tab ne sont pas les memes et pour cause un tanleau de int n'est pas la meme chose qu'un pointeur de int.

Discussions similaires

  1. Taille d'une chaîne de caractères
    Par walidos11 dans le forum Assembleur
    Réponses: 1
    Dernier message: 10/11/2010, 12h09
  2. Réponses: 0
    Dernier message: 31/10/2010, 17h54
  3. Réponses: 13
    Dernier message: 26/09/2008, 17h43
  4. Taille d'affichage réel d'une chaîne de caractères
    Par SheikYerbouti dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 21/02/2007, 17h46

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