Hello tous !
Je vous explique très vite:
J'ai fais un petit logiciel et un moment donner je récupert une saisie %s. Puis je lui remet en pleine face qlq minutes apres Mais le problème est que si il met: 'Pensez à passer l'aspirateur' le message serra: 'Pensez', mais s'il met: 'Pensezapasserl'aspirateur' le message serra: 'Pensezapasserl'aspirateur'.
Voilà, il prends mes espaces si vous avez une solution!
++
A première vue c'est un problème bizarre, mais de toutes façons sans ton code on ne peut rien dire, on ne sait pas comment tu gêres cette chaîne de caractères, si tu fais du C ou du C++, etc...
Utilise fgets(). %s dans scanf ça prend un mot, fgets() prend une ligne. gets() est à bannir dans 99,9% des cas. Sans autres indications je considère que tu fais du C.
C'est justement ton code qui bug chez lui la méthode de rzO est la bonne.
EDIT : tiens Gambit2029 : ICI tu peux savoir comment utilisé la méthode de rzO
L_MESSAGE tu remplaces par la taille du tampon, c'est juste une "constante symbolique", tu verras ça avec les macros plus tard. Le bar[...] = '\0' ça sert à enlever le caractère "fin de ligne" qui est lu... en fin de ligne, pour avoir une phrase propre.
Gambit2099 > Je devine que c'est parce que tu as utilisé scanf avant ; le fait est que scanf laisse les caractères \n dans le buffer, donc quand fgets passe, il tombe dessus et boum. C'est pour ça que ça pue d'utiliser scanf pour ce que tu en fais.
Regarde la FAQ sur "comment enlever les restes de scanf"
Willy_Paper > Comme je l'ai dit, ça sert à enlever le \n qui traine à la fin de la ligne pour que ce soit plus esthétique si tu veux afficher ta phrase après, c'est tout.
tebonb > Bah si, regarde ma réponse au-dessus. S'il n'y avait pas de \0, on ne pourrait pas appeler strlen.
Conseil perso : arrête d'utiliser scanf, utilise fgets/atoi/atof si tu veux récupérer des entiers. Tu récupères toujours une chaîne de caractères comme ça avec fgets() (pas forcément besoin d'enlever le \n si ce n'est pas pour écupérer une phrase) et après tu appelles atoi ou atof dessus.
int x;
char bar[L_BAR];
fgets(bar, L_BAR, stdin);
x = atoi(bar);
double x;
char bar[L_BAR];
fgets(bar, L_BAR, stdin);
x = atof(bar);
× 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.