Comment lire une chaine contient des espaces?

asstel Messages postés 54 Statut Membre -  
asstel Messages postés 54 Statut Membre -
Bonjour,

svp
j'ai utilisé printf("%s") mais elle a pris que le premier mot avant l'espace
svp aider moi :)

10 réponses

  1. SuperHelpeur Messages postés 119 Date d'inscription   Statut Membre Dernière intervention   5
     
    Bonjour,

    Tout d'abord j'aimerais savoir qu'est ce que tu entends par le mot " chaine " . est-ce que tu parles d'un fichier que tu as ouvert puis tu as eu des trucs bizarres ???
    Répond moi vite !!!
    0
  2. asstel Messages postés 54 Statut Membre
     
    nn juste lire une phrase donner par l'utilisateur:
    #include <stdio.h>
    #include <stdlib.h>

    int main()
    {
    char ph[50];

    scanf("%s",ph);
    printf("%s",ph);
    return 0;
    }
    0
  3. SuperHelpeur Messages postés 119 Date d'inscription   Statut Membre Dernière intervention   5
     
    t'as trouvé ça où dans un fichier ???

    Répond vite !!
    0
  4. asstel Messages postés 54 Statut Membre
     
    je suis entrain d'ecrire un pgm
    parmi les instructions c'est lire le nom d'un livre el le met dans un fichier mais le probleme c'est: printf(%s) recupère que le premier mot avant l'espace
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. SuperHelpeur Messages postés 119 Date d'inscription   Statut Membre Dernière intervention   5
     
    Mince si c'est une programmation je n'en ai jamais faite je peux pas t'aider plus désolé :(
    0
  7. asstel Messages postés 54 Statut Membre
     
    mercii pour votre attention :)
    0
  8. asstel Messages postés 54 Statut Membre
     
    pouvez vous me détailler plus?svp
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Ben tu remplaces ton scanf par la commande que je t'ai dite
      0
    2. asstel Messages postés 54 Statut Membre
       
      ouiii j'ai compris ça
      j'ai pas compri :
      Attention, cela stockera le '\n' s'il y a la place. Mais tu peux l'enlever en le remplaçant par '\0'.
      0
    3. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Il suffit de rajouter :
      char *p;
      if ( (p=strchr(ch, '\n')) != NULL )
           *p='\0';
      0
    4. asstel Messages postés 54 Statut Membre
       
      dsl :(
      je suis une debutante
      j'ai pas bien compris cette instruction fait quoi?
      0
    5. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Ben, c'est ce que j'ai dit plus haut :
      cela stockera le '\n' s'il y a la place. Mais tu peux l'enlever en le remplaçant par '\0'.
      strchr(ch,'\n') te renvoie un pointeur sur le retour chariot s'il existe, sinon strchr() renvoie NULL.
      Si strchr() est différent de NULL (donc s'il y a un retour chariot), on le remplace par '\0' (fin de chaîne de caractères).
      Si tu débutes vraiment, je te conseille un tuto : https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c

      Cdlt,
      0
  9. asstel Messages postés 54 Statut Membre
     
    merciiiiiiiii à vous j'ai reglé le probleme :)
    merciiii j'ai utiliser gets(ph);
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Je te conseille fortement de ne pas utiliser gets() mais fgets(). De plus, si tu utilises gets(), tu auras le même problème. Il faudra supprimer le '\n' résiduel dans ch.
      0
    2. asstel Messages postés 54 Statut Membre
       
      okkkk merciiiii je vais l'utiliser immédiatement :D
      0
  10. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Bonjour,

    Le mieux est d'utiliser fgets(ph, sizeof ph, stdin);
    Attention, cela stockera le '\n' s'il y a la place. Mais tu peux l'enlever en le remplaçant par '\0'.

    Cdlt,
    -1
    1. asstel Messages postés 54 Statut Membre
       
      avez vous une idée sur scanf("%49[^\n],chaine); ??
      merciii :)
      0
    2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Oui. Cela résoudra ton problème. Cela permettra à l'utilisateur de rentrer une chaîne de 49 caractères avec des espaces. Mais, cela fait partie des fonctions avancées, et pour bien faire il faudrait également tester la valeur de retour de scanf(). Bref, fgets() est beaucoup plus simple d'utilisation et est généralement conseillé.
      0
  11. karara20 Messages postés 58 Statut Membre 9
     
    bonjour ,
    tu doit replace
    scanf
    par
    gets(ph)
    parce que
    scanf
    ne lie pas les espace;

    https://tutodev1.blogspot.com/
    -1
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      N'importe quoi !
      gets() est à bannir. On utilise fgets() à la place...
      De plus scanf() peut lire les espaces si on l'utilise correctement => scanf("%[^\n]", ch);
      0
    2. karara20 Messages postés 58 Statut Membre 9
       
      a oui merci
      0