Problem structure en C

mr75 -  
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   -
bonjour a vous tous,
j'ai utilise dans mon programme une structure ou je veux faire une recherche sur les différant acteur créer voici le code de fonction de recherche ou le programme plant .
es que vous pouvez m'aider car le depo de mon prog c'est pour mercredi et je plante encore :(merci
void affichage(char np){
    int i,j;
    i=0;
    j=0;
    for(i=0;i<7;i++){
       
        for(j=0;j<12;j++){
       
            if (strcmp(enr[i].tpassageur[j].numpass,np)==0){

printf("NumVol:%s \n",enr[i].numvol);
printf("TPassagers\n");
printf("_________________________________________ \n");
printf("numPass: %s \n",enr[i].tpassageur[j].numpass);
printf("nom: %s \n",enr[i].tpassageur[j].nom);
printf("prenom: %s \n",enr[i].tpassageur[j].prenom);
printf("classe: %s \n",enr[i].tpassageur[j].classe);
printf("PoidsBag: %i \n",enr[i].tpassageur[j].poidbag);
printf("MontantExced: %i \n",enr[i].tpassageur[j].montant);
printf("Siege: %s \n",enr[i].tpassageur[j].siege);
printf("_________________________________________ \n");
            }
            else
            j++;
            }
            i++;
            }

    };


4 réponses

Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   663
 
salut,

je trouve cette ligne bizarre :
if (strcmp(enr[i].tpassageur[j].numpass,np)==0)
car np est un char, pas une chaine, pourquoi utiliser strcmp avec? ton compilateur ne râle pas (warning) ?

mais ce n'est peut-être pas ça le souci.
comment est déclarée ta structure ?
0
mr75
 
oui j'ai un warning et je vais la corriger.
concernant la structure et comme suis :
typedef struct
{
char numpass[7];
char nom[10];
char prenom[10];
char classe[30];
int poidbag;
int montant;
char siege[10];
}pass;
typedef struct
{
char numvol [7];
pass tpassageur[100];
}enr;
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Dit nous comment tu l'as corriger.
Je pense que ce que tu cherche à faire c'est :
if (atoi(enr[i].tpassageur[j].numpass)==np)
0
mr75
 
non je n'utilise pas la fonction atoi car les deux sont des char
0
Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   663
 
c'est normal ça :

            }  
            else  
            j++;  
            }  
            i++;  
            }  


?

tu es dans une boucle for qui va déjà incrémenter i et j, pourquoi tu le fais encore dans la boucle ? tu risques de sauter des valeurs.


qu'est-ce que tu veux faire précisément avec cette fonction ? quel est le rôle du paramètre np ?
0
mr75
 
j'ajoute la valeur np qui est dans mon cas le num de passport qui est le repaire de recherche dans la fonction et si je le trouve dans la structure je fais un affichage
et pour les deux incrémentation je les supprimer car comme t'as dis ils sont déjà incrémenter
0
mr75
 
j'ai passer tout la nuit et je bloque encore aider moi svp :(
0
mr75
 
j'ai un peut changer dans le code de la fonction; il entre dans la boucle pour faire les tests mais comme toujours l'application plante. es que vous pouvez m'aider svp :(

void affichage(char np){
    int i,j;
    i=0;
    j=0;
    for(i=0;i<7;i++){
        printf("I");
        for(j=0;j<12;j++){
        printf("J");
            if (strcmp(enr[i].tpassageur[j].numpass,np)==0){

    printf("NumVol:%s \n",enr[i].numvol);
printf("TPassagers\n");
printf("_________________________________________ \n");
printf("numPass: %s \n",enr[i].tpassageur[j].numpass);
printf("nom: %s \n",enr[i].tpassageur[j].nom);
printf("prenom: %s \n",enr[i].tpassageur[j].prenom);
printf("classe: %s \n",enr[i].tpassageur[j].classe);
printf("PoidsBag: %i \n",enr[i].tpassageur[j].poidbag);
printf("MontantExced: %i \n",enr[i].tpassageur[j].montant);
printf("Siege: %s \n",enr[i].tpassageur[j].siege);
printf("_________________________________________ \n");
            }
            }

            }

    }
0
chuka Messages postés 965 Date d'inscription   Statut Membre Dernière intervention   378
 
salut,
comme a dit Pacorabanix,t'es sur de ton:
strcmp(enr[i].tpassageur[j].numpass,np)...
ca ne serait pas plutot:
void affichage(char *np) //pour l'appel de la fonction..
strncmp(enr[i].tpassageur[j].numpass,np,strlen(np))
Et quand tu dis, "l'application plante", t'as un message ou autre?
@+
0
mr75
 
non j'ai pas un message elle crache !!!
bon maintenant j'ai changer le code et ca ne plante pas :p mais j'ai un petit probleme ou la fonction ne trouve pas la structure !!!!

void affichage(char np []){
    int i,j;
    i=0;
    j=0;
    for(i=0;i<7;i++){
        for(j=0;j<10;j++){
            if (strcmp(enr[i].tpassageur[j].numpass,np)==0)
            {

printf("NumVol:%s \n",enr[i].numvol);
printf("TPassagers\n");
printf("_________________________________________ \n");
printf("numPass: %s \n",enr[i].tpassageur[j].numpass);
printf("nom: %s \n",enr[i].tpassageur[j].nom);
printf("prenom: %s \n",enr[i].tpassageur[j].prenom);
printf("classe: %s \n",enr[i].tpassageur[j].classe);
printf("PoidsBag: %i \n",enr[i].tpassageur[j].poidbag);
printf("MontantExced: %i \n",enr[i].tpassageur[j].montant);
printf("Siege: %s \n",enr[i].tpassageur[j].siege);
printf("_________________________________________ \n");
            }
            else
            printf("################\n");
            }

            }

    }
0
mr75
 
j'ai tester avec des affichages les deux boucle fonctionne a merveille mais le teste ne fonction pas et quand j'ai fais un test je trouve que l'affichage de " enr[i].tpassageur[j].numpass " ne me donne rien !!!!
0
Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   663
 
ok, bonne idée d'avoir fait ce test.

Mais s'il ne t'affiche rien, c'est peut-être qu'il n'y a rien dans la chaine . Comment la remplis-tu ?
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
ouai, remlpi comment ?
Il serait peut être plus simple d'utiliser un entier pour stocker un numéro de passeport ?
0