Partage
  • Partager sur Facebook
  • Partager sur Twitter

scanf et le caractère ' ' en langage c

Sujet résolu
    24 octobre 2008 à 12:33:13

    bonjour
    j'ai essayé de lire une chaîne de caractère a partir du clavier puis l'afficher sur l'écran et afficher ça longueur
    voici le code:
    int main(int argc, char *argv[])
    {
        char chaine[10] ;
        long longueurChaine = 0;
        scanf("%s",chaine);
    
        // On récupère la longueur de la chaîne dans longueurChaine
        longueurChaine = strlen(chaine);
    
        // On affiche la longueur de la chaîne
        printf("La chaine %s fait %ld caracteres de long", chaine, longueurChaine);
    
        return 0;
    }
    

    le problème que j'ai, c'est que: si je ne met pas un espace ou une tabulation le programme me donne le résultat exact, et dans le cas ou je met un espace ' ' dans la chaîne il n'affiche que le premier mot avant l'espace et il ne calcule que la longueur de ce mot
    comment faire pour que le programme prend en charge toute la chaîne que je tape avant le caractère fin de ligne "retour chariot"

    et merci
    • Partager sur Facebook
    • Partager sur Twitter
      24 octobre 2008 à 12:43:10

      Salut.

      La question a été de maintes fois posée sur le forum. Utilisée comme tu le fais, scanf s'arrête au premier espace rencontré.

      Pour résoudre ça, on préfère utiliser la fonction fgets pour réaliser des saisies sécurisées en console. M@teo en parle dans son chapitre annexe.
      • Partager sur Facebook
      • Partager sur Twitter
        24 octobre 2008 à 12:46:23

        Accésoirement, il me semble que scanf() attend une adresse en second paramètre. Il faudrait aussi corriger
        scanf("%s",chaine);
        

        en :
        scanf("%s",&chaine);
        


        EDIT : Il est possible (très très très probable) que je viens de sortir un bêtise, alors prend ce message avec beaucoup de critique)
        • Partager sur Facebook
        • Partager sur Twitter
          24 octobre 2008 à 13:00:57

          Citation : Amandarn

          Accésoirement, il me semble que scanf() attend une adresse en second paramètre. Il faudrait aussi corriger

          scanf("%s",chaine);
          


          en :

          scanf("%s",&chaine);
          



          EDIT : Il est possible (très très très probable) que je viens de sortir un bêtise, alors prend ce message avec beaucoup de critique)


          "chaine" est un tableau, donc son nom est automatiquement converti en son adresse (qui est celle du premier élément), donc les deux notations sont valides ("chaine" et "&chaine") mais on préfère la première version ("chaine") pour bien signifier à la lecture qu'i s'agît d'un tableau.
          Le "&" reste obligatoire pour des variables qui ne sont ni des tableaux ni des pointeurs bien sûr.

          Edit : Ah bah non, je suis un con, -ed- le prouve en-dessous, j'ai plus qu'à trouver d'où je sortais cette idée.
          • Partager sur Facebook
          • Partager sur Twitter
            24 octobre 2008 à 17:19:59

            @Amandarn : Ânerie confirmée...

            Citation : Holomark

            "chaine" est un tableau, donc son nom est automatiquement converti en son adresse (qui est celle du premier élément), donc les deux notations sont valides ("chaine" et "&chaine")


            Absolument pas. Seule la notation chaine est valide. &chaine désigne l'adresse d'un tableau ce qui n'a rien à voir. Compare chaine + 1 et &chaine + 1, tu vas voir la différence !

            /* http://delahaye.emmanuel.free.fr/clib/ */
            #include "ed/inc/prt.h"
            
            int main (void)
            {
               char chaine[] = "hello";
            
               PRT_P (chaine);
               PRT_P (&chaine);
               PRT_P (chaine + 1);
               PRT_P (&chaine + 1);
            
               return 0;
            }
            

            chaine       = 0022FF30
            &chaine      = 0022FF30
            chaine + 1   = 0022FF31
            &chaine + 1  = 0022FF36
            
            Process returned 0 (0x0)   execution time : 0.031 s
            Press any key to continue.

            De toutes façons, un compilateur bien réglé signale le défaut.

            http://mapage.noos.fr/emdel/codage.htm#cfg_compilo
            _
            • Partager sur Facebook
            • Partager sur Twitter
            Music only !
              24 octobre 2008 à 18:24:21

              oui c'est comme Octal a annoncé matheo en parle dans l'annexe
              et je vous en vois l'adresse
              http://www.siteduzero.com/tutoriel-3-1 [...] tml#ss_part_1
              • Partager sur Facebook
              • Partager sur Twitter

              scanf et le caractère ' ' en langage c

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown