[C] recherche chaine caractère

joana -  
daronmaster Messages postés 326 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   44
 
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
joana
 
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   Statut Membre Dernière intervention   44
 
peux-tu me donner la structure Pays ainsi que les fonctions affichepays et lireVchaine stp, merci
0
joana
 
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
 
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   Statut Membre Dernière intervention   44
 
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
joana
 
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   Statut Membre Dernière intervention   437
 
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   Statut Membre Dernière intervention   44
 
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