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 :

chaine de caractere


Sujet :

C

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 140
    Par défaut chaine de caractere
    dans le code si dessous je demande de tapez une phrase comme par exemple : "salut les amis", je l'analyse ensuite et la met par tranche de mot, mais le probleme c que ca arrive a m'afficher que le premier des mots de ma phrase affiche, alors que je vopudrais pouvoir afficher n'importe quel mot...
    ici je demande le deuxieme mot de la phrase mais ca ne m'affiche rien ... que faire?

    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    #include <conio.c>
    #include <string.h>
     
    main()
    {
    int i, motsui=0, longueur;
    char question[150],mot[150][150];
     
               printf("tapez une phrase\n");
               while(getch() != '\n');
               gets(question);
               longueur=strlen(question);
               for(i=0;i<longueur;i++)      //analyse de la phrase
               {
               if(question[i]==' ' || question[i]==',')
               {
               motsui++;
               }
               if(question[i]!=' ' && question[i]!=',')
               {
               mot[motsui][i]=question[i];
               printf("caractere : %c\n mot en execution : %d",mot[motsui][i],motsui);
               getch();
               }
               }
               printf("%s",mot[1]);  //il ne m'affiche rien ..
               getch();
               }
    }
    }

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 10
    Par défaut
    Essaye de forcer le vidage de ton buffer d'affichage en mettant le caractère \n en fin de printf.

    De plus, indentes ton code, ce sera beaucoup plus clair

    Salut.

  3. #3
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2
    Par défaut
    Salut, j'ai modifié un peu ton code. Normalement ca devrais marcher :

    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
     
     
    void main()
    {
            int i, j, motsui=0, longueur;
            char question[150],mot[150][150];
     
            printf("tapez une phrase\n");
            //while(getch() != '\n');
            gets(question);
            longueur=strlen(question);
            j=0;
     
            for(i=0;i<longueur;i++) //analyse de la phrase
            {
                    if(question[i]==' ' || question[i]==',')
                    {
                            motsui++;
                            j=0;
                    }
                    else
                    {
                            mot[motsui][j]=question[i];
                            j++;
                    }
            }
     
            printf("%s",mot[0]);
            getch();
    }

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Par défaut
    Salut
    je tiens à signaler qu'il ne faut pas utiliser gets
    Voici ce qu'on peut lire dans Programmation système sous Linux de Christophe Blaes
    Il ne faut jamais utiliser gets()!, En effet, gets() ne permet pas de préciser la longueur maximale de la chaine à saisir. En conséquence si le nombre de caractères excede la taille de la zone qu'on a allouée, gets() continuera joyeusement à écrire en mémoire en provoquant un débordement de buffer
    A bientot

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 140
    Par défaut
    merci ca marche !

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 140
    Par défaut
    j'utilise gets() parce que je sais la longueur maximal de la chaine ...

    ou sinon je ne l'utiliserait pas car on m'avait deja avertit de ce probleme,


    mais c sympas de ta part de me réavertir

  7. #7
    Membre confirmé

    Inscrit en
    Mai 2003
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 39
    Par défaut
    Citation Envoyé par gaut
    j'utilise gets() parce que je sais la longueur maximal de la chaine ...
    Et si je tapais 200 caractères en entrée pour ton programme ?

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Par défaut
    Plus simple encore !
    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
     
    #include <stdio.h> 
    #include <string.h> 
    #define TAILLE_MAX 150
     
    int main() 
    { 
      int i=0;
      char c;
      char question[TAILLE_MAX];
      char *mot[TAILLE_MAX];
     
      printf("Tapez une phrase:\n"); 
      while( i < TAILLE_MAX && (c = getch()) != 13 )
        {
          if(c=='\b' && i>=1)
    	{printf("%s","\b \b ");i--;}
          if(c!= '\b')
    	{printf("%c",c); question[i]=c;i++;}
        }
     
      printf("\n");
      i=0;
      mot[i]=strtok(question," ,\t");
      while(mot[i] != NULL)
        {
          printf("mot %d:%s\n",i,mot[i]);
          i++;
          mot[i]=strtok(NULL," ,\t");
        }
      return 0;
    }
    Encore plus plus simple
    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
     
    #include <stdio.h> 
    #define TAILLE_MAX 150
     
    int main() 
    { 
      int i=0,j=0;
      char c;
      char mot[TAILLE_MAX][TAILLE_MAX];
     
      printf("Tapez une phrase:\n"); 
      while((i<TAILLE_MAX || j <TAILLE_MAX) && (c = getch()) != 13 )
        {
          switch(c)
    	{
    	case ' ':case ',':
    	  {printf("%c",c);if(i>0){j++;i=0;}break;}
    	case '\b':
    	  {if(i>0){printf("%s","\b \b ");i--;}}
    	default:
    	  {printf("%c",c); mot[j][i]=c;i++;break;}
    	}
        }
     
     
      return 0;
    }
    Sans affichage:
    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
     
    #include <stdio.h> 
    #define TAILLE_MAX 150
     
    int main() 
    { 
      int i=0,j=0;
      char c;
      char mot[TAILLE_MAX][TAILLE_MAX];
     
      printf("Tapez une phrase:\n"); 
      while((i<TAILLE_MAX || j <TAILLE_MAX) && (c = getch()) != 13 )
        {
          switch(c)
    	{
    	case ' ':case ',':
    	  {if(i>0){j++;i=0;}break;}
    	case '\b':/* backspace */
    	  {if (i>0) {i--;} break;}
    	default:
    	  {mot[j][i]=c;i++;break;}
    	}
        }
      return 0;
    }
    Et je suis sur qu'il y a moyen de faire encore plus simple !!
    A bientot

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  2. Réponses: 13
    Dernier message: 13/06/2003, 14h13
  3. Pb Update avec chaine de caractere
    Par JuJu° dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 28/05/2003, 15h58
  4. [LG]comparaison de chaines de caracteres
    Par thesam dans le forum Langage
    Réponses: 6
    Dernier message: 20/05/2003, 22h41
  5. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01

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