En language C : probleme de return de valeur

Résolu/Fermé
Paul - 30 déc. 2004 à 17:09
 le père - 25 mars 2008 à 15:04
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 75 Date d'inscription mardi 2 janvier 2007 Statut Membre Dernière intervention 18 août 2007 13
30 mars 2007 à 17:27
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
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 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 30 décembre 2004
30 déc. 2004 à 18:24
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
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
Essaye en utilisant des mallocs (allocations de mémoire)??
0
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 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
8 févr. 2008 à 01:09
Son problème était en décembre 2004, je doute qu'il va te lire aujourd'hui.
0
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
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