Supprimer espace langage C

Discutez d'informatique ici !
Cimogard
Membre Naturel
Messages: 12
Enregistré le: 06 Fév 2019, 01:20

Supprimer espace langage C

par Cimogard » 03 Avr 2019, 21:22

Bonjour,
Je chercher a ajouter des espaces entre chaque lettre en langage C.
Seulement je n'arrive pas à effectué ce que je veux . Pour l'instant j'ai ca :
Code: Tout sélectionner
void main() {
    char ch[100];
    printf("entrer chaine");
    gets(ch);
    int i=0;
    while(ch[i] != '\0'){
        ch[i++]=' ';
        ch[i]= ch[i];
        i++;
    }
    ch[i+1]='\0';
    printf("%s",ch);
}


Mais lorsque je lance, quand je marque Bonjour il va m'afficher : o j u
Quelqu'un pour m'aider ?
Merci d'avance



pascal16
Membre Transcendant
Messages: 6063
Enregistré le: 01 Mar 2017, 14:58
Localisation: Angoulème : Ville de la BD et du FFA. gare TGV

Re: Supprimer espace langage C

par pascal16 » 03 Avr 2019, 22:07

ch[i++]=' ';
ARRGGG
si tu es à la iéme boucle, ça rajoute un espace à la position i+1 de la boucle et ça augmente i de 1 !!!!

ch[i]= ch[i]; <- affecte le même caractère à la place du caractère
i++;

danyL
Membre Rationnel
Messages: 571
Enregistré le: 03 Jan 2015, 15:29

Re: Supprimer espace langage C

par danyL » 03 Avr 2019, 22:16

Cimogard a écrit: ch[i++]=' ';

bonsoir
avec cette ligne tu écrases le contenu de la chaine saisie, un caractère sur 2 tu le remplaces par un espace

tu pourrais utiliser une autre variable pour ta chaine de sortie

Cimogard
Membre Naturel
Messages: 12
Enregistré le: 06 Fév 2019, 01:20

Re: Supprimer espace langage C

par Cimogard » 03 Avr 2019, 22:22

Je ne vois toujours pas, j'ai essayé de mettre mon i=-1 et cela m'affiche maintenant B o j u

Cimogard
Membre Naturel
Messages: 12
Enregistré le: 06 Fév 2019, 01:20

Re: Supprimer espace langage C

par Cimogard » 03 Avr 2019, 22:33

J'ai enfin réussi en changeant ma variable
Merci
Code: Tout sélectionner
#include<stdio.h>

void main() {
    char ch[100];
    printf("entrer chaine");
    gets(ch);
    int i=0;
    int j=0;
    size_t t=strlen(ch);
    char chaine[t];
    while(ch[i] != '\0'){
        chaine[j++]=' ';
        chaine[j]= ch[i];
        i++;
        j++;
    }
    printf("%s",chaine);
}

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 5990
Enregistré le: 22 Nov 2007, 14:00

Re: Supprimer espace langage C

par fatal_error » 04 Avr 2019, 00:24

Hi

Ton code reste incorrect et 'marche' par chance.
Ta variable chaine devrait etre deux fois plus grande que ta variable ch, or tu ne la définis qu'avec la taille de ch.

Regarde lexecution avec valgrind pour observer ton problème mémoire.

Par ailleurs, une idée classique dans ce genre d'indexation est d'utiliser i*qqch. (Ici, *2)
Ce qui te permet ici d'itérer sur ch, et pour chaque i, d'écrire chaine[i*2]=ch[i] et chaine[i*2+1]=' '
Avec eventuellement le dernier espace non utile..
la vie est une fête :)

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite