[C] recherche chaine caractère

Fermé
joana - 19 avril 2008 à 16:31
daronmaster Messages postés 326 Date d'inscription vendredi 12 janvier 2007 Statut Membre Dernière intervention 11 mai 2009 - 21 avril 2008 à 09:28
Bonjour,

comment faire pour rechercher chaine de caractère dans une structure en langage c?

quand il n'y a aucun pays ça fonctionne mais dés que j'en encode un puis que je le recherche, il me dit qu'il n'a pas pu être trouvé.

voici mon code:

short RechercheParNom (struct Pays*p) //par pays

{
	
	int j,i;
	short trouve=0;
	char NomPays[30];
	

	printf("Recherche d'un Pays\n");
	printf("________________________\n\n");

	printf("Entrez le nom a rechecher : ");
	j=LireVChaine(NomPays,30);	
	Majuscule(&NomPays[0]);


	for(j=0;j<30 && trouve==0;j++,i++)
	{
		
		
		if(strcmp(p->NomPays,NomPays)==0)
		{
			trouve=1;
		}
	}


if(j==30 && trouve==0)
		j=0;

	if (trouve==1)
	{
		AffichePays(p);
	}
	else
	{
		printf("\nLe Pays recherche n'a pu etre trouve");
	}
	
	return (j-1);
}
A voir également:

5 réponses

daronmaster Messages postés 326 Date d'inscription vendredi 12 janvier 2007 Statut Membre Dernière intervention 11 mai 2009 44
19 avril 2008 à 16:36
dans :


for(j=0;j<30 && trouve==0;j++,i++)
{


if(strcmp(p->NomPays,NomPays)==0)
{
trouve=1;
}
}



a quoi servent tes indices ? ou plutot a quoi sert cette boucle ?

un strcmp ne suffit-il pas ? entre p->NomPays et NomPays ?

strcmp compare deux chaine donc je ne vois l'utilité de ta boucle.

0
bonjour,

j'avais essayer sans boucle aussi et ça donne le même résultat, il ne trouve pas le pays malgré qu'il y en a d'encoder.
il y a surement une erreur mais je n'arrive pas à la trouver...

short RechercheParNom (struct Pays*p) //par pays

{
	
	int j,i;
	short trouve=0;
	char NomPays[30];
	

	printf("Recherche d'un Pays\n");
	printf("________________________\n\n");

	printf("Entrez le nom a rechecher : ");
	j=LireVChaine(NomPays,30);	
	Majuscule(&NomPays[0]);


	
		
		
		if(strcmp(p->NomPays,NomPays)==0)
		{
			trouve=1;
		}
          
        if(j==30 && trouve==0)
		j=0;

	if (trouve==1)
	{
		AffichePays(p);
	}
	else
	{
		printf("\nLe Pays recherche n'a pu etre trouve");
	}
	
	return (j-1);
}
0
daronmaster Messages postés 326 Date d'inscription vendredi 12 janvier 2007 Statut Membre Dernière intervention 11 mai 2009 44
20 avril 2008 à 11:33
peux-tu me donner la structure Pays ainsi que les fonctions affichepays et lireVchaine stp, merci
0
Oui bien sûr, les voici:

struct Pays{
	intNumPays;
	char   NomPays[20];
         int   NombreHab;
	
};

int LireVChaine (char *p,short nb)
{
	int i=0;
	char *g;

	fflush(stdin);

	g=p;

	do
	{
		*g=getchar();
		i++;
		g++;
	}while (*(g-1)!='\n' && i < nb);
	*(g-1)='\0';
	
	Majuscule(p);
	

	return (i);
}

void AffichePays(struct Pays*p)

{
	system("cls");
	printf("\n%d",p->NumPays);
	printf("%s",->NomPays);
	printf("%d",->NombreHab);
}


merci
0
joana > joana
20 avril 2008 à 14:56
correction

struct Pays{
int NumPays;
char NomPays[20];
int NombreHab;

};


int LireVChaine (char *p,short nb)
{
int i=0;
char *g;

fflush(stdin);

g=p;

do
{
*g=getchar();
i++;
g++;
}while (*(g-1)!='\n' && i < nb);
*(g-1)='\0';

Majuscule(p);


return (i);
}

void AffichePays(struct Pays*p)

{
system("cls");
printf("\n%d",p->NumPays);
printf("%s",p->NomPays);
printf("%d",p->NombreHab);
}
0
daronmaster Messages postés 326 Date d'inscription vendredi 12 janvier 2007 Statut Membre Dernière intervention 11 mai 2009 44
20 avril 2008 à 18:22
pourquoi ne pas utilisé un bon vieux scanf("%s",p) ? et tes chaine ne sont pas de meme taille une est à 20 et une autre est à 30, pb de cohérence
0
j'ai modifier pour les tailles et j'ai essayer avec scanf mais il me dit qu'il ne trouve pas bien que j'ai encodé précemment, il doit y avoir une erreur mas je ne trouve pas...
0
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
20 avril 2008 à 23:59
comment tu rentres les pays dans la structure avant la recherche ?
0

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

Posez votre question
daronmaster Messages postés 326 Date d'inscription vendredi 12 janvier 2007 Statut Membre Dernière intervention 11 mai 2009 44
21 avril 2008 à 09:28
voila ce que je ferai (le pb vient certainement que tu joue avec des tableau non alloué dynamiquement):

/* dans ta structure :

char *NomPays; et pas char NomPays[30];


*/


char s[256];

scanf("%s",s);//tu saisies le nom du pays

c->NomPays = (char *)malloc(sizeof(char)*(strlen(s)+1)); //allocation dynamique d'un tableau de char

strcpy(c->NomPays,s); //copie de s dans c->NomPays

//et voila cela devrait marcher enfin j'en suis quasi sur
// ensuite fais un strcmp et ok qd le resultat est à 0.

bon courage pour la suite
0