[C] recherche chaine caractère
joana
-
daronmaster Messages postés 326 Date d'inscription Statut Membre Dernière intervention -
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:
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:
- [C] recherche chaine caractère
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Caractère ascii - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Chaine tnt gratuite sur mobile - Guide
5 réponses
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.
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.
peux-tu me donner la structure Pays ainsi que les fonctions affichepays et lireVchaine stp, merci
Oui bien sûr, les voici:
merci
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
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);
}
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);
}
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
/* 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
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...