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 :

pb d'affichage d'un char* (caractère par caractère)


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 23
    Par défaut pb d'affichage d'un char* (caractère par caractère)
    Bonjour,

    bon, je pense que le titre exprime tous..
    et voici le code

    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    int main()
    {
        char* mot;
     
        printf("Donnez le mot : \n");
        scanf("%s",&mot);
     
        while (mot != NULL) // ou while (c != '\0') 
        {
            printf("%s",mot);
            c = mot[0];
            mot++;
            printf("%c",c);
        }
        return 0;
    }
    ou ça bloque ?

  2. #2
    Membre actif Avatar de maleaume
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 93
    Par défaut
    essaye ca
    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
    int main()
    {
       char mot[100];
       char *pmot;
        printf("Donnez le mot : \n");
        scanf("%s",&mot);
        pmot = &mot[0];  
        printf("%s",mot);
        while (*pmot != '\0') 
        {
            printf("%c",*pmot); 
    	pmot++;
        }
        return 0;
    }

  3. #3
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 23
    Par défaut
    ça marche bien
    merci maleaume !

  4. #4
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    En principe, il faut encore finir par afficher un caractère '\n', car c'est cela qui forcera le tampon du flux de sortie standard de se vider.

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void)
    {
        int err = 0;
        char mot[100] = "";
        char *pmot;
     
        printf("Donnez le mot : \n");
        if (0 == saisir_chaine(mot, sizeof mot))
        {
            pmot = mot;
            printf("%s\n",mot);
     
            while (*pmot != '\0')
            {
                printf("%c", *pmot);
                pmot++;
            }
            printf("\n");
        }
        else
        {
            err = EXIT_FAILURE;
        }
     
        return err;
    }
    La fonction saisir_chaine() vide uniquement ici à te montrer comment faire la saisie de chaine de caractères en anticipantant les problèmes que tu pourrais rencontrer par la suite avec une maîtrise approximative de la fonction scanf().

    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
    int saisir_chaine(char *tampon, size_t taille)
    {
        int err = 0;
     
        if (tampon != NULL)
        {
            if (NULL != fgets(tampon, taille, stdin))
            {
                char *pc = strchr(tampon, '\n');
                if (pc != NULL)
                {
                    *pc = 0;
                }
                else
                {
                    int c;
     
                    while ((c = fgetc(stdin)) != '\n' && c != EOF)
                    {
                        /* Ne fait que vider le tampon du flux d'entree standard */
                    }
     
                    err = 1;
                }
            }
            else
            {
                err = 1;
            }
        }
        else
        {
            err = 1;
        }
     
        return err;
    }
    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

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

Discussions similaires

  1. [Débutant] Lecture caractère par caractère
    Par boober31 dans le forum Débuter
    Réponses: 10
    Dernier message: 28/09/2007, 14h52
  2. Réponses: 22
    Dernier message: 10/04/2007, 11h33
  3. Réponses: 18
    Dernier message: 17/01/2007, 12h49
  4. Réponses: 6
    Dernier message: 16/12/2006, 15h08
  5. Réponses: 10
    Dernier message: 19/06/2006, 19h04

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