Problem structure en C

Fermé
mr75 - 27 avril 2010 à 04:43
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 28 avril 2010 à 08:17
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 jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
27 avril 2010 à 04:47
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
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 vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
27 avril 2010 à 08:39
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
non je n'utilise pas la fonction atoi car les deux sont des char
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
Modifié par Pacorabanix le 27/04/2010 à 05:00
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
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
j'ai passer tout la nuit et je bloque encore aider moi svp :(
0
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 samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
Modifié par chuka le 28/04/2010 à 21:24
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
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
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 jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
28 avril 2010 à 00:27
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 vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
28 avril 2010 à 08:17
ouai, remlpi comment ?
Il serait peut être plus simple d'utiliser un entier pour stocker un numéro de passeport ?
0