Enlever les espaces

Résolu
cs_darkwhite Messages postés 133 Date d'inscription vendredi 17 novembre 2000 Statut Membre Dernière intervention 29 avril 2008 - 11 mai 2007 à 23:07
cs_darkwhite Messages postés 133 Date d'inscription vendredi 17 novembre 2000 Statut Membre Dernière intervention 29 avril 2008 - 12 mai 2007 à 11:14
Salut a tous, bah voila je veux resoudre l'exercice batteau d'enlever les espaces d'une chaine de caracteres. Pourtant j'ai fait ce code :

# include <stdio.h>

int main ()
{
  char chaine[200];
  int i=0;
  scanf("%s",&chaine);

  while(chaine[i]!='\0')
    {
      if (chaine[i]==' ')
     
      chaine[i]='_';
      i++;
    
    }
  i=0;
 while(chaine[i]!='\0')
    {
      printf("%c",chaine[i]);
     
       i++;
         }
 printf("\n");
}

Qui evidement ne marche pas !!
En effet il m'affiche la chaine de caractere tronquée avant un espace. Je m'explique :
Si je rentre :
"je part"
il renvoit
"je"
Ou est passer l'autre partie aller savoir
Donc ou est le probleme ? merci d'avance

6 réponses

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
11 mai 2007 à 23:31
C'est scanf qui fait ça je crois. Essais avec gets.

C++ (@++)<!--
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
11 mai 2007 à 23:39
Tien revoici ton code mais en un peu mieu:

int main (void)

{

  char chaine[200], *c = chaine;

  gets(chaine);


  while(*c){

    if(*c == ' ') *c = '_';

    ++c;

  }


  printf("%s\n", chaine);


  return 0;

}

C++ (@++)<!--
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 mai 2007 à 11:13
Avertissement à prendre en considération car gets ne permet pas de spécifier la taille du buffer.
Tu devrais utiliser fgets à la place, qui te permet de dire la taille du buffer passée. Pour le dernier paramètre, tu mets stdin pour lire sur l'entrée standard.

while(*c) signifie while(*c != 0) ou encore while(*c != '\0'), '\0' étant le caractère utilisé pour les fins de chaines. Ca veut donc dire tant qu'on n'a pas atteint la fin de la chaine.
L'utilisation des pointeurs et équivalente à un accès indexé au tableau, sauf que les instructions générées sont plus courtes. En gros ca revient au même, c'est surtout une question de goût.

_____________________________________
Un éditeur de ressources gratuit pour Windows
3
cs_darkwhite Messages postés 133 Date d'inscription vendredi 17 novembre 2000 Statut Membre Dernière intervention 29 avril 2008
12 mai 2007 à 10:10
Ok

Dabord quad je remplace scanf par gets, a la compilation gcc me renvoie :

 

gcc -o espace espace.c

/tmp/ccSAsAss.o: dans la fonction « main »:

espace.c:(.text+0x2e): AVERTISSEMENT: the `gets' function is dangerous and should not be used.


Faut il utiliser une autre commande de compilations ?


Ensuite que signifie l'expression "while(*c) ? et pourquoi utiliser des pointeurs plutot que des tableaux?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_darkwhite Messages postés 133 Date d'inscription vendredi 17 novembre 2000 Statut Membre Dernière intervention 29 avril 2008
12 mai 2007 à 10:42
AHAH j'ai été un peu con sur ce coup la !!
En effet c'est juste un avertissement que le compilateur me renvoie sinon le code marche tres bien. Merci beaucoup

ps: les question precedentes tiennent toujours...
0
cs_darkwhite Messages postés 133 Date d'inscription vendredi 17 novembre 2000 Statut Membre Dernière intervention 29 avril 2008
12 mai 2007 à 11:14
Ok merci beaucoup
0
Rejoignez-nous