En language C : probleme de return de valeur

Résolu
Paul -  
 le père -
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?

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

void main()
{
    char ZL[81];
    int i,j=0,lg,id,lgm,
        nbnom=0,// le nombre de noms existe dans le titre
        nbnomS=0;// le nombre de noms satisfaits la condition de sujet
    char *pm;
    //char *ttitre[10];

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

    printf("Veuillez entrer le titre du poeme :\n");
    gets(ZL);
    printf("%s\n",ZL);
    for(i=0;ZL[i]!='\0';i++)
    {
        ZL[i]=CHANGE(ZL[i]);
    }
    
    do
    {
        
        lg=strlen(ZL);
        if (lg>0) // la condition qui permet de reconnaitre une chaine vide
        {

            for(i=0;i<lg;i++)
            {
                if(CARACSPE(ZL[i])==0)
                {
                    id=i;
                    nbnom++; //chaque fois il trouve le nom, il va augementer le nombre de nom d'un
                    for(i++;i<lg&&CARACSPE(ZL[i])==0;i++);
                    lgm=i-id;
                    if(lgm>=3)
                    {
                        pm=(char*)malloc(lgm+1);
                        nbnomS++;//pour compter combien le nom satisfait dans le titre
                        strncpy(&pm[0],&(ZL[id]),lgm);
                        pm[lgm]='\0';
                        //strcpy(ttitre[nbnomS],pm);
                        //free(pm);
                        printf("%s\n",pm);
                    }
                }
            }
        }
        if (nbnom==0) printf("Vous avez mal saisit le titre. Car il n'y a pas de caractere\n");
    } while (nbnom==0);
    nbnom=0;
    do
    {
        printf("Veuillez entrer le poeme :\n");
        gets(ZL);
        if(ZL[0]!='\0')
        {
            j++;
            printf("%d %s\n",j,ZL);
        }
    } while(*ZL);
}

int CARACSPE(char a)
{
    char T[11]={' ','.','!','?','\'',',',';',':','(',')','"'};
    int i;
    for (i=0; i<11; i++)
    {
        if (a==T[i]) return (1);
    }
    return (0);
}

char CHANGE(char dia)
{
    int i;
    char Ta[2]={'à','â'};
    char Te[4]={'é','è','ê','ë'};
    char Ti[2]={'î','ï'};
    char To[2]={'ô','ö'};
    char Tu[3]={'ù','û','ü'};
    char Tc[1]={'ç'};
    dia=tolower(dia);
    for(i=0;i<2;i++)
    {
        if(dia==Ta[i]) return('a');
    }
    for(i=0;i<4;i++)
    {
        if(dia==Te[i]) return('e');
    }
    for(i=0;i<2;i++)
    {
        if(dia==Ti[i]) return('i');
    }
    for(i=0;i<2;i++)
    {
        if(dia==To[i]) return('o');
    }
    for(i=0;i<3;i++)
    {
        if(dia==Tu[i]) return('u');
    }
    for(i=0;i<1;i++)
    {
        if(dia==Tc[i]) return('c');
    }
    return(dia);
}

10 réponses

lirey83 Messages postés 76 Statut Membre 13
 
Pour enlever les accents d'une phrase, je verrais plutôt un truc plus simple comme ça :
void EnleveAccent(char *phrase)
{
  int i;

  for (i=0; i<strlen(phrase); i++)
  {
    if (phrase[i] == 'à') phrase[i]='a';
    else
      if ((phrase[i] == 'é') || (phrase[i] == 'è')) phrase[i]='e';
  }
}


et ainsi de suite pour les autres accents.
Note que j'écrase la phrase originale, si tu veux la conserver, faut en faire une copie avec la fonction strcpy par exemple.
1
krost
 
Je ne sais pas pourquoi ton code ne marche pas.
Mais moi quand j'ai a faire une fonction comme a tienne j'ai utiliser sa :
	if(!(dia == 'à') || !(dia =='â'))
	{	
		return 'a';
	}


En esperant d'avoir aider.
Bonne année.
0
paul75 Messages postés 3 Statut Membre
 
Merci beaucoup mais j'ai essaye avec ce que tu m'a indiqué mais au lieu de remplacer les caracter cela remplace tous par 'a'.

Merci
0
krost
 
En effet, dsl.
J'ai chercher ma fonction mais je la trouve pas.
Par contre d'après les souvenir, j'ai eut beaucoup de mal à gerer les caractères accebtués en c.
Si tu n'arrive pas à trouver je te conseil de demander de l'aide sur le forum, dans la section c, de www.develloppez.com.
C la qu'on m'avait aider.
Par contre je serais interesser de recuperer ta fonction une fois que tu la fini.
En esperant t'avoir aider.

@++
0

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

Posez votre question
jules
 
Essaye en utilisant des mallocs (allocations de mémoire)??
0
ihsanlino
 
ou est votre probleme!! ton programme ne retourne pas la valeur donc essayer ça!!


{

if(!(dia == 'à') || !(dia =='â'));\ et ainsi de suite pour les autres valeur..ab.c.e.ect*\
return(dia);
} j espere que ça vs aide..bon chance!
0
fiddy Messages postés 11653 Statut Contributeur 1 847
 
Son problème était en décembre 2004, je doute qu'il va te lire aujourd'hui.
0
Sytze
 
Bonjour,
Voila, je souhaite faire un chenillard dont le nombre de led change en fonction d'un switch
Plus bas j'ai fais un switch case avec un return et quand je debbug on me dit
qu'une void function main can not return to a value ! alors je ccomprend pas d'ou vien l'erreur, si quelqu'un peux m'aider...

/*
This example is designed for the REva board with the STM8 daughter board.
It is the simplest possible example for toggling the REva LEDs.
Use it to get to know the REva, STM8, RLink, RIDE, etc.
*/

#include <intrins.h>
#include <STM8\stm8af61xx.h>

#define myGPIO GPIOB

//definition of the port registers B
#define PX_ODR ((myGPIO)->ODR)
#define PX_IDR ((myGPIO)->IDR)
#define PX_DDR ((myGPIO)->DDR)
#define PX_CR1 ((myGPIO)->CR1)
#define PX_CR2 ((myGPIO)->CR2)

#define myGPIO2 GPIOG

//definition of the port registers G
#define PX2_ODR ((myGPIO2)->ODR)
#define PX2_IDR ((myGPIO2)->IDR)
#define PX2_DDR ((myGPIO2)->DDR)
#define PX2_CR1 ((myGPIO2)->CR1)
#define PX2_CR2 ((myGPIO2)->CR2)

//delay function, waiting for a defined period
void delay (unsigned int cnt)
{
//decrement counter until it is zero
while(cnt--)
_nop_();
}

unsigned int i=0;
unsigned char j=0;

//Chenillard avec 1 led
void chenillard_1led()
{
if(j == 0x00)
j = 0x01;
PX_ODR = ~j;
j <<= 1;
// if(j > 7)
// j = 0
}

//Chenillard avec 2 leds
void chenillard_2led()
{
if(j == 0x00)
j = 0x03;
PX_ODR = ~j;
j <<= 1;
// if(j > 7)
// j = 0
}

//Chenillard avec 3 leds
void chenillard_3led()
{
if(j == 0x00)
j = 0x07;
PX_ODR = ~j;
j <<= 1;
// if(j > 7)
// j = 0
}

//Chenillard avec 4 leds
void chenillard_4led()
{
if(j == 0x00)
j = 0x0F;
PX_ODR = ~j;
j <<= 1;
// if(j > 7)
// j = 0
}
//Program entry point
void main()
{

//configure PB in output push-pull
PX_DDR = 0xFF;
PX_CR1 = 0xFF;
PX_CR2 = 0x00;

//configure PG in input pull up without interrupt
PX2_DDR = 0x00;
PX2_CR1 = 0xFF;
PX2_CR2 = 0x00;


//main loop

while(1)
{
// Affiche le nombre de led sélectionner par les switchs

i = PX2_IDR ;
i &= 0xF0;

switch (i)
{
case 0x80:
return chenillard_1led();
break;
case 0x40:
return chenillard_2led();
break;
case 0x20:
return chenillard_3led();
break;
case 0x10:
return chenillard_4led();
break;
default:
PX_ODR = 0x10;
break;
}
//wait for some time
/*the value of the parameter of this call defines the speed of the toggling*/
delay (10000);

}
}
0
le père
 
Bonjour

void function main can not return to a value
Tu es sûr qu'il y a un 'to' ?
Ce message est très explicite.
Qu'est ce que tu ne comprends dedans ? L'anglais ? Tu sais ce qu'est une 'void function' ? Tu sais ce que veut dire 'rendre une valeur' ? Alors l'erreur est flagrante, surtout que toi tu sais sur quelles lignes elle porte (ça aurait été sympa de nous le dire d'ailleurs).
0