Se connecter / S'enregistrer
Votre question

en language C : probleme de return de valeur

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
30 Décembre 2004 15:28:42

Bonjour,
voila mon probleme, j'ai fait une fonction change qui doit retourner un char par exemple 'a'.

Dans mon exercice, je doit transformer par exemple :
"Les lièvres" en "lievre". (idem pour é,à,ù, etc...)

J'ai essaye en faisant ce que vous voyais ds mon code et le programme return rien aparemment, il remet avec les accent et tou.
pouvez vous m'eclairer?


  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. void main()
  6. {
  7. char ZL[81];
  8. int i,j=0,lg,id,lgm,
  9. nbnom=0,// le nombre de noms existe dans le titre
  10. nbnomS=0;// le nombre de noms satisfaits la condition de sujet
  11. char *pm;
  12. //char *ttitre[10];
  13.  
  14. int CARACSPE(char);
  15. char CHANGE(char);
  16.  
  17. printf("Veuillez entrer le titre du poeme :\n");
  18. gets(ZL);
  19. printf("%s\n",ZL);
  20. for(i=0;ZL[i]!='\0';i++)
  21. {
  22. ZL[i]=CHANGE(ZL[i]);
  23. }
  24.  
  25. do
  26. {
  27.  
  28. lg=strlen(ZL);
  29. if (lg>0) // la condition qui permet de reconnaitre une chaine vide
  30. {
  31.  
  32. for(i=0;i<lg;i++)
  33. {
  34. if(CARACSPE(ZL[i])==0)
  35. {
  36. id=i;
  37. nbnom++; //chaque fois il trouve le nom, il va augementer le nombre de nom d'un
  38. for(i++;i<lg&&CARACSPE(ZL[i])==0;i++);
  39. lgm=i-id;
  40. if(lgm>=3)
  41. {
  42. pm=(char*)malloc(lgm+1);
  43. nbnomS++;//pour compter combien le nom satisfait dans le titre
  44. strncpy(&pm[0],&(ZL[id]),lgm);
  45. pm[lgm]='\0';
  46. //strcpy(ttitre[nbnomS],pm);
  47. //free(pm);
  48. printf("%s\n",pm);
  49. }
  50. }
  51. }
  52. }
  53. if (nbnom==0) printf("Vous avez mal saisit le titre. Car il n'y a pas de caractere\n");
  54. } while (nbnom==0);
  55. nbnom=0;
  56. do
  57. {
  58. printf("Veuillez entrer le poeme :\n");
  59. gets(ZL);
  60. if(ZL[0]!='\0')
  61. {
  62. j++;
  63. printf("%d %s\n",j,ZL);
  64. }
  65. } while(*ZL);
  66. }
  67.  
  68. int CARACSPE(char a)
  69. {
  70. char T[11]={' ','.','!','?','\'',',',';',':','(',')','"'};
  71. int i;
  72. for (i=0; i<11; i++)
  73. {
  74. if (a==T[i]) return (1);
  75. }
  76. return (0);
  77. }
  78.  
  79. char CHANGE(char dia)
  80. {
  81. int i;
  82. char Ta[2]={'à','â'};
  83. char Te[4]={'é','è','ê','ë'};
  84. char Ti[2]={'î','ï'};
  85. char To[2]={'ô','ö'};
  86. char Tu[3]={'ù','û','ü'};
  87. char Tc[1]={'ç'};
  88. dia=tolower(dia);
  89. for(i=0;i<2;i++)
  90. {
  91. if(dia==Ta[i]) return('a');
  92. }
  93. for(i=0;i<4;i++)
  94. {
  95. if(dia==Te[i]) return('e');
  96. }
  97. for(i=0;i<2;i++)
  98. {
  99. if(dia==Ti[i]) return('i');
  100. }
  101. for(i=0;i<2;i++)
  102. {
  103. if(dia==To[i]) return('o');
  104. }
  105. for(i=0;i<3;i++)
  106. {
  107. if(dia==Tu[i]) return('u');
  108. }
  109. for(i=0;i<1;i++)
  110. {
  111. if(dia==Tc[i]) return('c');
  112. }
  113. return(dia);
  114. }


Merci infiniment

Autres pages sur : language probleme return valeur

30 Décembre 2004 22:49:57

up, please
30 Décembre 2004 23:02:27

Euh bon, pas évident de lire du code comme ça, tu as donc apparemment une erreur de logique, mais où, telle est la question...
Ce que je te conseille:
- faire des affichages très souvent : afficher quand tu rentres dans une fonction, les paramètres, afficher les valeurs dans les for ou les if...
- en fait, c'est plus facile en utilisant un debuggeur (comme gdb) qui peut énormément aider dans ces cas là.
Désolé mais là comme ça, je vois pas trop...
Contenus similaires
31 Décembre 2004 02:14:23

ta fonction CHANGE a l'air correct aiinsi ke celle qui s'occupe des caracteres de separations : par contre je comprends aps ton systeme de boucle "do" qui m'ont l'air un peu compliker
31 Décembre 2004 02:14:58

ta fonction CHANGE a l'air correct aiinsi ke celle qui s'occupe des caracteres de separations : par contre je comprends aps ton systeme de boucle "do" qui m'ont l'air un peu compliker
31 Décembre 2004 03:26:42

je suis comme Keitaman69, je comprends pas a quoi sert ta boucle do while:
on dirait que tu extrait les mots un par un, que tu ajoutes les \0 derrière pour ensuite les afficher un par un... je vois pas le rapport avec le pb initial qui consiste a remplacer certains caractères par un autre...
(50 minute plus tard après avoir compilé avec MINGWCC et débuggé)
chez moi le titre ne change pas, cela est du au fait que le compilateur ne comprend pas les caractères spéciaux de la fonctions change
Ainsi, {'à','â'} est compris comme {'ó','ô'} etc...
Si c'était que cela cela serait trop beau... En plus, le programme n'arrive pas interprèter les caractères spéciaux que tu rentres au clavier. Ainsi pour lui si j'entre comme tritre "àaàaà", le 'à' correspond au caractère ascii -123 (!!!), doncsi tu remplaces le 'à' par -123 (c'est a dire que tu mets {-123, 'â'} a la place) dans la fonction Change et bien cela marche... conclusion : t'as plus qu'a prendre ton débugger et regarder pour chaque caractère spéciaux ce que comprend le programme puis remplacer dans la fonction change par le nombre correspondant...

Vive les caractères ascii...

Si qq a une explication de ces caractères négatifs et bien je suis preneur
31 Décembre 2004 08:33:46

la fonction CHANGE, je l'aurai fait avec un gros switch plutôt ;-)

par contre je capte pas du tout ce que font ces déclarations :

int CARACSPE(char);
char CHANGE(char);

qq'un peut m'éclairer svp ? chuis un peu rouillé en C :-?
31 Décembre 2004 11:26:46

chez moi ca compile même sans... en fait cela correspond au prototype des fonctions que l'on mets normalement avant la fonction main (ou alors on déclare les fonctions avec leur corps avant la fonction main)... j'aimerais bien savoir si il y a des gens chez qui le -123 mache pour le 'à'....
31 Décembre 2004 12:02:23

ah ben oui je suis con... c'est le fait que ce soit placé dans le main() qui m'a feinté 8-)

edit : le problème ne viendrait pas d'une histoire de type signé (le compilateur prendrait des valeurs pour un char comprises entre -127 et 127, au lieu de 0 à 255 comme on a l'habitude) ??
15 Juillet 2008 18:54:36

bonjour voilà pour ton code pk ne ps essayer de l'executé pa à pa essaye ca avec le bouton "F7" à condition de régler tt les erreurs....
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS