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 :

Caractère de fin de chaîne \0


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 7
    Par défaut Caractère de fin de chaîne \0
    Bonjour tout le monde,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      char texte[101];
      char texteBis[101];
      scanf("%[^\n]\n", texte);
      longueur=strlen(texte);
      for(i=0;i<longueur;i++)
        {
           if(texte[i]!=' ')
           {
           texteBis[j]=toupper(texte[i]); // texte en maj
           j++;
           }  
        }
    J'ai un problème avec ce code. Je dois lire un texte de 100 caractères au plus. J'ai donc rajouté +1 à 100 pour la case contenant le caractère spécial \0.
    Seulement, \0 disparait lorsque je fais ma boucle. J'ai essayé de rajouter +1 à ma variable longueur (pour accéder à la case \0 de ma chaîne de caractères) dans cette boucle mais le résultat est inchangé.

    Merci d'avance pour votre aide,

    Joc

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Je crois que scanf n'ajoute pas de \0.
    Le tableau n'étant pas initialisé, c'est alors normal de ne rien obtenir.

    Essaie comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char texte[101] = {'\0'};
      char texteBis[101] = {'\0'};
      scanf("%[^\n]\n", texte);/* tu es sur de toi? parce qu'un utilisateur peut très bien entrer un mot plus long que 100 */
      longueur=strlen(texte);
      for(i=0;i<longueur;i++)

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 7
    Par défaut
    Merci de l'aide. Malheureusement, même avec l'initialisation le résultat est le même.

    C'est pour un exercice de franceioi. D'après l'aide de leur forum, le problème viendrait de la boucle de de ce fameux caractère \0.
    Lorsque je copie mon texte, ce caractère ne serait pas copié.

  4. #4
    Membre actif
    Inscrit en
    Juin 2013
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 18
    Par défaut
    salut,
    ligne 11 : le j++ nécessite sûrement un j=0 par exemple entre la ligne 5 et la ligne 6, sinon tes majuscules vont s'écrire n'importe où.
    d'autre part tu devrais rajouter texteBis[j]='\0'; après la ligne 13 pour indiquer la fin de la chaine.

  5. #5
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Je n'ai pas réfléchi aussi loin.
    Je crois que je vais arreter d'aider ce matin

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 7
    Par défaut
    Merci, j'avais bien initialiser j=0. J'ai rajouté texteBis[j]='\0'; sans succès également.

    Voici l'énoncé et l'exemple.

    "Vous devez afficher chaque titre de livre qui est un palindrome."

    EXEMPLE
    entrée :
    3
    Lieur a Rueil
    Le chevalier delibere
    Un roc si biscornu

    sortie :
    Lieur a Rueil
    Un roc si biscornu

    Mon problème c'est que je n'ai que le premier titre en sortie.

    Voici l'intégralité de mon 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    #include <stdio.h>
    #include <string.h>
    #include <ctype.h> 
     
    int main()
    {
      int nbLivres, i=0, h=0, j=0, total=0, longueur=0, longueurBis=0, longueurBis2=0;
      char titre[101];
      char titreBis[101];
      scanf("%d\n", &nbLivres);
        for(i=0;i<nbLivres;i++)
        {
          total=0;
          scanf("%[^\n]\n", titre);
         longueur=strlen(titre);
          // strcpy(titreBis,titre); // copier titre dans titreBis
          for(i=0;i<longueur;i++)
          {
            if(titre[i]!=' ')
            {
              titreBis[j]=toupper(titre[i]); // titre en maj
              j++;
            }  
          }  
          titreBis[j]='\0';    
          longueurBis=strlen(titreBis); 
          if(longueurBis==1)
          {
            printf("%s\n", titre);
          }
          else if(longueurBis%2==1)
          {
            longueurBis2=(longueurBis-1)/2;
            for(i=0, h=longueurBis-1;i<h;i++,h--)
            {
              if(titreBis[i]==titreBis[h])
              {
                total++;
                if(total==longueurBis2)
                {
                  printf("%s\n", titre);
                }
              }
            }     
          }
        }
      return 0;
    }

  7. #7
    Membre actif
    Inscrit en
    Juin 2013
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 18
    Par défaut
    re
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      for(i=0;i<nbLivres;i++)
        {
         (...)
          for(i=0;i<longueur;i++)
    i designe à la fois le nombre de livres et la longueur, tu sois le remplacer par 2 variables distinctes.
    j doit être remis à zero à chaque nouvelle chaine

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 7
    Par défaut
    Merci beaucoup ! Je l'avais oublié ce j... Ca fait une grosse erreur en moins déjà !
    J'ai remplacé la deuxième boucle avec i par une autre lettre.

    Malheureusement, l'ensemble de ces modifications ne change toujours pas mon résultat.

    D'après l'aide de france ioi, il faudrait regarder au niveau du caractère \0 dans la boucle ligne 18 à 25. Je cherche, je cherche...

  9. #9
    Membre actif
    Inscrit en
    Juin 2013
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 18
    Par défaut
    pour la dernière boucle tu utilise aussi la lettre i, est-ce que tu l'as aussi modifiée ?

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 7
    Par défaut
    Bingo

    Je l'avais oublié celui-là ! Un grand merci pour l'aide précieuse. Je pourrais me coucher un peu plus tôt ce soir

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

Discussions similaires

  1. Caractères d'échapement et fin de chaîne
    Par Franck.H dans le forum C
    Réponses: 3
    Dernier message: 04/10/2013, 15h19
  2. Caractère de fin de chaîne.
    Par dré kam dans le forum Langage
    Réponses: 2
    Dernier message: 01/12/2011, 09h32
  3. [PHP 5.0] file_get_contents() et caractères en début et fin de chaînes
    Par Chiendelune dans le forum Langage
    Réponses: 2
    Dernier message: 18/05/2010, 17h30
  4. marqueur de fin de chaîne de caractère
    Par pipo44 dans le forum Langage
    Réponses: 2
    Dernier message: 10/07/2008, 16h20
  5. Réponses: 5
    Dernier message: 18/10/2006, 09h01

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