Chaine de caractères
Résolu/Fermé
Istabandal
Messages postés
2
Date d'inscription
dimanche 15 décembre 2013
Statut
Membre
Dernière intervention
15 décembre 2013
-
15 déc. 2013 à 20:00
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 18 déc. 2013 à 15:59
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 18 déc. 2013 à 15:59
A voir également:
- Chaine de caractères
- Caractères ascii - Guide
- Chaine tnt gratuite sur mobile - Guide
- Caractères spéciaux clavier azerty - Guide
- Caractères spéciaux - Guide
- Plus de chaine tv - Guide
2 réponses
ElementW
Messages postés
4816
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 228
Modifié par gravgun le 15/12/2013 à 20:17
Modifié par gravgun le 15/12/2013 à 20:17
Salut, avec l'indentation (décalage du code) l'erreur devient beaucoup plus simple à repérer:
Dans ton
from human import idiocy
del idiocy
void conversion(char *ch1, char *ch2) { int i; for(i=0; i<strlen(ch1); i++) { ch2[i]=ch1[i]; printf("%d ", i); if(ch2[i]>='A' && ch2[i]<='Z') { ch2[i]+=32; } else if(ch2[i]>='a' && ch2[i]<='z') { ch2[i]-=32; } else { ch2[i]=ch1[i]; i++; } } ch2[i]=0; }
Dans ton
else,
ch2[i]=ch1[i];est inutile vu que tu l'as déjà fait avant, et
i++;fait avancer i de trop, i augmente déjà à chaque passage dans la boucle (à la fin d'une itération), donc tu rates la lettre suivante, donc ne la copies pas, et comme la zone mémoire où le caractère copié est remplie de
'\0'au départ, et que
'\0'marque la fin d'une chaîne, elle "s'arrête" ici (mais il y a encore du texte après).
from human import idiocy
del idiocy
Istabandal
Messages postés
2
Date d'inscription
dimanche 15 décembre 2013
Statut
Membre
Dernière intervention
15 décembre 2013
15 déc. 2013 à 20:13
15 déc. 2013 à 20:13
votre proposition
ElementW
Messages postés
4816
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 228
15 déc. 2013 à 20:16
15 déc. 2013 à 20:16
"votre proposition": Ma proposition? Qu'est-ce qu'elle a ma proposition?
j'ai vu l'erreur!! la condition sur les espaces ne sert à rien. le problème était juste que 'scanf'() considère l'espace comme la fin de la chaine de caractère. alors que tous ça est géré par gets() car cette fonction considère comme fin de la chaine de caractère que lorsque l'utilisateur tape sur entrer(enter)!!
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
18 déc. 2013 à 15:59
18 déc. 2013 à 15:59
Attention, gets() est obsolète et ne doit pas être utilisé. Il faut plutôt utiliser fgets(). Note bien également qu'avec cette fonction, il y a un caractère en plus en fin de chaîne (si la chaîne est assez grande pour le contenir bien sûr) : le saut de ligne '\n'. A supprimer donc si tu n'en veux pas.