Chaine majuscule en minuscule

Résolu/Fermé
master_pc Messages postés 317 Date d'inscription dimanche 27 septembre 2009 Statut Membre Dernière intervention 18 avril 2015 - 31 oct. 2012 à 14:28
master_pc Messages postés 317 Date d'inscription dimanche 27 septembre 2009 Statut Membre Dernière intervention 18 avril 2015 - 3 nov. 2012 à 18:36
Bonjour,

Je cherche à créer un programme qui demande une chaine en majuscule puis qui la converti en minuscule mais j'ai de grosse difficultés, voici mon code, peut-t-on me dire se qui ne va pas ?

Merci.

#include <stdio.h>
#include <stdlib.h>

int conversion(motEntre)
{
int i;
for (i = 0; i = '\0'; i++)
printf("%c+32", motEntre);
}

int main()
{
char motEntre[100];

printf("Entrez un mot : \n");
scanf("%s", motEntre);
motEntre=conversion;
printf("Vous avez entre : %s", conversion);

return 0;
}

Avec l'utilisation de CodeBlocks 10.05 et son compilateur GNU GCC Compiler
A voir également:

12 réponses

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
31 oct. 2012 à 14:41
Salut,
#include <stdio.h>
#include <stdlib.h>

int conversion(motEntre)manque le type de l'argument
{
int i;
for (i = 0; i = '\0'; i++)
printf("%c+32", motEntre);a quoi sert une boucle sans utilisation de l'indice ?
}

int main()
{
char motEntre[100];

printf("Entrez un mot : \n");
scanf("%s", motEntre);
motEntre=conversion;affectation d'une fonction à un tableau !!
printf("Vous avez entre : %s", conversion);
conversion est une fonction, tu cherches à afficher une chaine
return 0;
}

Il faut un minimum de rigueur dans la programmation, ne pas tout mélanger et savoir à peu près ce qu'on écrit.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
31 oct. 2012 à 15:20
Je rajouterais :
for (i = 0; i = '\0'; i++)
Sachant que '\0' vaut 0, cela ne risque pas de faire beaucoup d'itérations.
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
31 oct. 2012 à 15:32
surtout avec une affectation à la place d'un test logique.
Le truc est tellement énorme que je suis passé à travers celle là.
0
master_pc Messages postés 317 Date d'inscription dimanche 27 septembre 2009 Statut Membre Dernière intervention 18 avril 2015 8
31 oct. 2012 à 17:29
D'accord, merci pour l'aide, il me faut donc revor pas mal de parties tel que les fonctions mais alors, je dois faire ce programme sans fonction ?

Merci
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
31 oct. 2012 à 17:39
Ah non. Faire une fonction reste une excellente idée.
Il suffit juste de corriger les petits problèmes signalés plus hauts et de revenir vers nous si tu n'y arrives pas.
Bon courage.
0
master_pc Messages postés 317 Date d'inscription dimanche 27 septembre 2009 Statut Membre Dernière intervention 18 avril 2015 8
31 oct. 2012 à 18:09
Je ne peux demander à passer un tableau en fonction, mais alors...comment puis-je faire ?

J'ai pus corriger qu'une seul ligne :

#include <stdio.h>
#include <stdlib.h>

int conversion(char motEntre)
{
int i;
for (i = 0; i = '\0'; i++)
printf("%c+32", motEntre);
}

int main()
{
char motEntre[100];

printf("Entrez un mot : \n");
scanf("%s", motEntre);
motEntre=conversion;
printf("Vous avez entre : %s", conversion);

return 0;
}
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
31 oct. 2012 à 18:30
revois tes cours sur l'appel de fonctions, là tu utilise un pointeur de fonction.
Tu n'as corrigé qu'un problème jusque là. écris déjà bien ta fonction, après on verra comment récupérer le résultat et l'afficher.
Pour être clair :
for (i = 0; i = '\0'; i++)
printf("%c+32", motEntre);
ne veux rien dire et ne fais absolument pas ce que tu en attends. Modifie ta condition de sortie de la boucle et remplace la deuxième ligne par une modification de ton tableau.
Aller, courage, la prochaine fois je ne veux plus voir une seul des lignes que j'ai mis en gras identique.
0
master_pc Messages postés 317 Date d'inscription dimanche 27 septembre 2009 Statut Membre Dernière intervention 18 avril 2015 8
Modifié par master_pc le 31/10/2012 à 20:24
Ah, je pense que j'y suis presque, enfin au moins, ça s'exécute... mais manque juste la conversion :

#include <stdio.h>
#include <stdlib.h>

char conversion(char motEntre)
{
int resultat = 0;
for (motEntre = 0; motEntre = '\0'; motEntre+32)
return resultat;
}

int main()
{
char motEntre[100], resultat= 0;

printf("Entrez un mot : \n");
scanf("%s", &motEntre);
resultat=conversion(motEntre);
printf("Vous avez entre : %s", resultat);

return 0;
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
31 oct. 2012 à 20:49
scanf("%s", &motEntre);
Enlève le & de motEntre. Il n'en faut pas pour les chaînes de caractères.

Après, tu as deux solutions. Soit la fonction conversion() renvoie une chaîne (dans ce cas, il faudra utilisation une allocation dynamique (malloc)), soit ta fonction modifie la chaîne entrée en paramètre. Je pense que cette dernière solution est plus simple.

Donc dans ce cas :
void conversion(char *motEntre)
   int i;
   for (i = 0; motEntre[i]!= '\0'; i++) il faut mettre motEntre[i]!='\0'
      if(motEntree[i] ...)
         motEEntree[i]+='A'-'a';
0

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

Posez votre question
master_pc Messages postés 317 Date d'inscription dimanche 27 septembre 2009 Statut Membre Dernière intervention 18 avril 2015 8
31 oct. 2012 à 22:07
Bonsoir,

Je ne sais pas si c'est possible, mais cette exercice nous a été donner alors que nous ne connaissions pas les pointeurs, et t-il alors possible de faire sans ?

Merci
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
31 oct. 2012 à 23:38
Ca tombe bien, je n'ai pas utilisé de pointeur...
Si c'est ça qui te choque : void conversion(char *motEntre)
Tu peux mettre : void conversion(char motEntre[])
Mais note bien que cela sera exactement la même chose.
0
master_pc Messages postés 317 Date d'inscription dimanche 27 septembre 2009 Statut Membre Dernière intervention 18 avril 2015 8
Modifié par master_pc le 1/11/2012 à 18:00
Bonsoir,

Merci pour la réponse,

Donc l'étoile n'ayant rien à voir avec un pointeur... mais je ne comprend pas la condition, si je met cette condition, il faut indiquer que faire avec toute les lettres de l'alphabet non ?

Je veux travailler avec le code ASKII, voilà pourquoi j'indique que mes lettre doivent valoir +32, bien que je ne sache ou le mettre ce +32

#include <stdio.h>
#include <stdlib.h>

char conversion(char motEntre[])
{
int resultat = 0, i;
for (motEntre[i] = 0; motEntre = '\0'; motEntre[i]+32)
return resultat;
}

int main()
{
char motEntre[100], resultat= 0;

printf("Entrez un mot en majuscule : \n");
scanf("%s", motEntre);
resultat=conversion(motEntre);
printf("Votre meme mot entre, en minuscule : %s", resultat);

return 0;
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
1 nov. 2012 à 18:19
+32, c'est la différence entre 'A' et 'a'. Cela revient donc au même. Mais c'est plus lisible de mettre 'A'-'a'. En un coup d'oeil, on voit à quoi cela se rapporte. Enfin c'est toi qui vois.

Donc l'étoile n'ayant rien à voir avec un pointeur
En fait si. Mais tu ne peux pas faire autrement. Il n'est pas possible d'envoyer un tableau en paramètre. Il est converti automatiquement en pointeur par le compilateur.

La condition que j'avais mise sert au cas où le caractère n'est pas une minuscule. Imagine que le mot est "Coucou". Ton programme affichera 'C'+32 ce qui donnera un caractère bidon.

Pour le reste de mes remarques, relis mon post précédent...
0
master_pc Messages postés 317 Date d'inscription dimanche 27 septembre 2009 Statut Membre Dernière intervention 18 avril 2015 8
1 nov. 2012 à 22:47
Bonsoir,

Je viens d'essayer de modifier le code, mais je ne comprends plus grand chose; C'est quoi les trois petits point dans le if ? Et qu'es-ce que ce "+=" ?

Mon programme ne s'exécute plus du tout même il avant il plantais, au moins il démarrait...

#include <stdio.h>
#include <stdlib.h>

char conversion(char motEntre[])
{
char resultat = 0, i;
for (motEntre[i] = 0; motEntre = '\0'; motEntre[i]+32)
if (motEntre[i]<'A'||'Z'>)
{
motEntre[i]+='A'-'a';
}

return resultat;
}

int main()
{
char motEntre[100], resultat= 0;

printf("Entrez un mot en majuscule : \n");
scanf("%s", motEntre);
resultat=conversion(motEntre);
printf("Votre meme mot entre, en minuscule : %s", resultat);

return 0;
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
1 nov. 2012 à 23:08
C'est pas parce qu'un programme compile, qu'il est correcte ^^.
Mais, tu ne tiens toujours pas compte de mes remarques, donc...

Je remets :

Après, tu as deux solutions. Soit la fonction conversion() renvoie une chaîne (dans ce cas, il faudra utilisation une allocation dynamique (malloc)), soit ta fonction modifie la chaîne entrée en paramètre. Je pense que cette dernière solution est plus simple.

En gros, soit tu mets char* conversion(char motEntre[]), soit void conversion(char motEntre[])
Aucun autre prototype ne peut aller (pas char conversion(char motEntre[]) comme tu as mis).
Si tu mets char*..., il faudra faire un malloc. Mais vu que tu n'as pas le droit au pointeur...
Donc, tu dois utiliser void conversion(char motEntre[])
Et il te faudra modifier le tableau passé en paramètre.

C'est quoi les trois petits point dans le if ? Et qu'es-ce que ce "+=" ?
Les ... ? Ben à toi de compléter. L'idée est de dire Si le caractère est compris entre 'a' et 'z'.
motEEntree[i]+='A'-'a'; signifie motEntre[i]=motEntre[i]+'A'-'a';
0
master_pc Messages postés 317 Date d'inscription dimanche 27 septembre 2009 Statut Membre Dernière intervention 18 avril 2015 8
2 nov. 2012 à 15:04
Bonjour,

Je n'ais jamais vu les + et - que je trouve curieux, enfin bon.

#include <stdio.h>
#include <stdlib.h>

void conversion(char motEntre[])
{
char resultat = 0, i;
for (motEntre[i] = 0; motEntre = '\0'; motEntre[i]) //Mon opération ne fonctionne toujours pas ici, que dois-je modifier ?
if (motEntre[i]'A'&&'Z')//Je pense que ma condition est correcte
{
//Que dois-je écrire ici ?
}

return resultat;
}

int main()
{
char motEntre[100], resultat= 0;

printf("Entrez un mot en majuscule : \n");
scanf("%s", motEntre);
resultat=conversion(motEntre);
printf("Votre meme mot entre, en minuscule : %s", resultat);

return 0;
}
Mais au lancement j'ai -ligne 8- error : expected ')' before 'A', alors que ma parenthèse est bien fermé.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
2 nov. 2012 à 16:06
Depuis le début, on te dit que :
for (motEntre[i] = 0; motEntre = '\0'; motEntre[i]) //Mon opération ne fonctionne toujours pas ici, que dois-je modifier ?
C'est archi faux... Donc oublie cette ligne.
Il faut mettre :
for (i = 0; motEntre[i]!= '\0'; i++)


if (motEntre[i]'A'&&'Z')//Je pense que ma condition est correcte
Tu penses mal ^^. D'une part, il faut comparer avec 'a' et 'z' (et non 'A' et 'Z', puisque ce sont les minuscules qui se convertissent en majuscule).
D'autre part, il faut comparer si le code ascii de motEntree[i] est compris entre 'a' et 'z'. Il faut donc employer des signes inférieures ou égales.

//Que dois-je écrire ici ?
motEntree[i]+='A'-'a'; // ou motEntree[i]=motEntree[i]+'A'-'a'; si tu préfères
J'ai l'impression que tu comprends pas du tout ce que tu fais... Car ça, je te l'ai déjà dit il y a plusieurs posts...

Ensuite, il faudra aussi revoir le main(). Enfin, on verra ça plus tard.
0
master_pc Messages postés 317 Date d'inscription dimanche 27 septembre 2009 Statut Membre Dernière intervention 18 avril 2015 8
2 nov. 2012 à 17:14
J'ai avancé(du moins je pense) grâce à un des post sur ce site ou justement vous expliquez comment le réaliser https://forums.commentcamarche.net/forum/affich-1833059-c-minuscules-majuscules

Mais bien sur, je veux garder mon idée, mais je pense qu'il dois y avoir une erreur avec le tableau car il me met error : void value not ignored as it ought to be.

J'ai essayer avec puts, mais il m'affichais des caractères bizard.... donc ça s'exécutais, mais cela ne faisant pas tout, comme vous m'avez dis

#include <stdio.h>
#include <stdlib.h>

void minuscule(char motEntre[])
{
int i;
for (i = 0; motEntre[i]!= '\0'; i++)

if (motEntre[i]<='A'&&motEntre[i]<='Z')
motEntre[i] = +'A'-'a';

}

int main()
{
char motEntre[100], resultat;

printf("Entrez un mot en majuscule : \n");
scanf("%s", motEntre);
resultat=minuscule(motEntre);
printf("Votre meme mot entre, en minuscule : %s", resultat);

return 0;
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
2 nov. 2012 à 17:42
J'en ai profité pour relire ta consigne.
Depuis le début, je pensais conversion en majuscule.
Donc, il faut juste corriger : motEntre[i] = +'A'-'a'; en motEntre[i]+='a'-'A'
Ce n'est pas =+ mais += cela change tout.

Une fois ça corrigé, la fonction minuscule sera parfaite.

On peut donc se pencher sur main()
resultat=minuscule(motEntre);
Pour éviter l'utilisation de pointeur, on a créé une fonction qui ne retourne rien (void). Donc il faut mettre minuscule(motEntre); tout simplement. Cela modifiera la chaîne motEntre et la convertira en minuscule.

printf("Votre meme mot entre, en minuscule : %s", resultat);
Du coup, ce n'est pas "resultat" qu'il faut mettre mais motEntre

Et là ton programme devrait fonctionner :-)
0
master_pc Messages postés 317 Date d'inscription dimanche 27 septembre 2009 Statut Membre Dernière intervention 18 avril 2015 8
3 nov. 2012 à 11:55
Bonjour,

Merci pour la réponse, mais si je tape "OK", il me répond "OK", la conversion ne se fait donc pas.

#include <stdio.h>
#include <stdlib.h>

void minuscule(char motEntre[])
{
int i;
for (i = 0; motEntre[i]!= '\0'; i++)

if (motEntre[i]<='A'&&motEntre[i]<='Z')
motEntre[i] +='A'-'a';
}

int main()
{
char motEntre[100], resultat;

printf("Entrez un mot en majuscule : \n");
scanf("%s", motEntre);
minuscule(motEntre);
printf("Votre meme mot entre, en minuscule : %s", motEntre);

return 0;
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
3 nov. 2012 à 12:09
Parfois j'ai l'impression que tu me lis pas...
Je remets en gras :
Donc, il faut juste corriger : motEntre[i] = +'A'-'a'; en motEntre[i]+='a'-'A'
0
master_pc Messages postés 317 Date d'inscription dimanche 27 septembre 2009 Statut Membre Dernière intervention 18 avril 2015 8
3 nov. 2012 à 12:26
D'accord, mais rien à faire.... toujours en majuscule.

#include <stdio.h>
#include <stdlib.h>

void minuscule(char motEntre[])
{
int i;
for (i = 0; motEntre[i]!= '\0'; i++)

if (motEntre[i]<='A'&&motEntre[i]<='Z')
motEntre[i]+='a'-'A';
}

int main()
{
char motEntre[100], resultat;

printf("Entrez un mot en majuscule : \n");
scanf("%s", motEntre);
minuscule(motEntre);
printf("Votre meme mot entre, en minuscule : %s", motEntre);

return 0;
}
0
nicocorico Messages postés 799 Date d'inscription dimanche 19 juin 2011 Statut Membre Dernière intervention 3 juillet 2018 138
3 nov. 2012 à 16:14
Oui c'est sans doute du fait que tu as une erreur ici
 if (motEntre[i]<='A'&&motEntre[i]<='Z') 

bon je connais pas le C, mais c'est sûrement plus ainsi :
if (motEntre[i]>='A'&&motEntre[i]<='Z') 

C'est supérieur ou égal à "A" et inférieur ou égal à "Z"...
Il faut aussi que tu cherches par toi-même, que tu essaie autre chose quand ça ne fonctionne pas, ça te fera progresser! Au pire tout ce que tu risque c'est un plantage, alors...!
Le débugger est aussi très utile à cette fin, tu aurais vite fait de constater que le déroulement est erroné...
0
master_pc Messages postés 317 Date d'inscription dimanche 27 septembre 2009 Statut Membre Dernière intervention 18 avril 2015 8
3 nov. 2012 à 18:36
Bonsoir,

Ca fonctionne ! Je pense revoir certaine notion qui m'échappent, et oui, il faut aussi que j'apprenne à chercher plus.

Un grand merci !
0