Affichage chaines de caractères en c

Fermé
eya - Modifié le 14 nov. 2018 à 10:01
MissRobet Messages postés 4 Date d'inscription mercredi 14 novembre 2018 Statut Membre Dernière intervention 20 novembre 2018 - 14 nov. 2018 à 10:01
bonjour,
je suis débutante en C et au cours de mon premier projet j'ai pas pu afficher une liste de chaines voila un exemple de ce que j'ai fait et je souhaite que vous pouvez m'aider a découvrir les erreurs que j'ai fait :
sachant que j'ai voulu limiter l'espace réservé pour la date a 10 et le numéro de passeport a 7 ... j'ai juste utiliser le 30 pour que je puisse utiliser le boule for de 0 a 30 .. ce qui n'a pas fonctionné

#include <stdio.h>
#include <stdlib.h>

int main()
{ // declaration des variables
    int i,j,Nbr_de_Voyages=9 ;
   // compteur i
    int Reservation [100] ={1,2,3,4,5,6,7,8,9,10};
    char NumPasseport [100][30] ={"D123306","W195457","R900149","R917289","R317943","F359714","W501407","X553380","A375198","W802146"};
    char NomVoyageur [100][30]={"eya osmane","mohamed ben Hossine","slim ltaief","islem hamed","chayma osmane","souhir hidoussi","mohamed lahiani","bilel ghazeli","wejden ben zarga","chirine lahmer"};
    char DateNaisVgr [100][30]={"20/12/1998","11/11/1996","23/4/1946","31/01/1986","01/09/2007","19/08/1998","29/05/1998","30/04/2000","19/09/2015","06/02/1998"};
    char DateDpt [100][30]={"20/02/2015","30/12/2016","12/12/2016","09/12/2018","29/04/2017","07/11/2015","13/11/2016","05/12/2017","04/06/2016","26/07/2016"};
    //date ouverture de l"agence de voyage= 2015
    char DateArv [100][30]={"28/02/2015","02/01/2017","26/12/2016","12/12/2018","04/05/2017","17/11/2015","18/11/2016","08/12/2017","24/06/2016","30/07/2016"};
    //8..4..14..3..6..10..5..3..20..4.
    char VilleDest [100][30]={"Antalya","paris","Antalya","Roma","Antalya","Antalya","canberra","thailande","Ankara","Berlin"};
    char PaysDest [100][30]={"Turquie","France","Turquie","Italia","Turquie","Turquie","australie","Thailande","Turquie","allemagne"};
    int Grp_V_F [100];
    // Grp_V_F si 1 en groupe si 0 seul
    int NumGrp [100];
    //si Grp_V_F=1 --> NumGrp=0; automatiquement

    //  Un GROUPE est caractérisé par :
    /*int GRP_ID [100];
    char GRP_DateDpt [100];
    char GRP_DateArv [100];
    char GRP_VilleDest [100];
    char GRP_PaysDest [100];
    int GRP_NbrVgrs [100];*/
    // nafs l i kol mara taffichi beha voiyage w les caracteristicues mte3ou

    for (i=0;i<=Nbr_de_Voyages;i++)
    {
        for (j=0;j<=30;j++)
        {
        printf("%i \n",Reservation[i]);
        printf("%s \n",NumPasseport[i][j]);
        printf("%s \n",NomVoyageur[i][j]);
        printf("%s \n",DateNaisVgr[i][j]);
        printf("%s \n",DateDpt[i][j]);
        printf("%s \n",DateArv[i][j]);
        printf("%s \n",VilleDest[i][j]);
        printf("%s \n",PaysDest[i][j]);
        printf("%i \n",Grp_V_F[i]);
        printf("%i \n",NumGrp[i]);
        }
    }
    return 0;
}



EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

1 réponse

[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié le 14 nov. 2018 à 09:50
Bonjour eya,

Nbr_de_Voyages
devrait être initialisé à 10, et ta boucle for devrait être :

    for (i=0;i<Nbr_de_Voyages;i++)
    {
        printf("%i \n",Reservation[i]);
        printf("%s \n",NumPasseport[i]);
        printf("%s \n",NomVoyageur[i]);
        printf("%s \n",DateNaisVgr[i]);
        printf("%s \n",DateDpt[i]);
        printf("%s \n",DateArv[i]);
        printf("%s \n",VilleDest[i]);
        printf("%s \n",PaysDest[i]);
        printf("%i \n",Grp_V_F[i]);
        printf("%i \n",NumGrp[i]);
    }

En C, une chaîne de caractères est un tableau de char (terminé par
'\0'
). Donc, un tableau de chaînes de caractères est effectivement un tableau à 2 dimensions de char (en fait, un tableau de tableaux de char) par exemple comme tu l'as exactement déclaré
char NumPasseport [100][30]
où le premier indice est le nombre de chaînes et le deuxième la longueur de chaque chaîne.

Donc
NumPasseport[0]
permet d'accéder à la première chaîne stockée,
NumPasseport[1]
à la deuxième, ...
NumPasseport[9]
à la dernière de tes 10 chaînes et la seule boucle
for (i=0;i<Nbr_de_Voyages;i++)
permet effectivement de parcourir ces différentes valeurs de 0 à 9 (note le signe strictement inférieur).

Dal
0
MissRobet Messages postés 4 Date d'inscription mercredi 14 novembre 2018 Statut Membre Dernière intervention 20 novembre 2018
14 nov. 2018 à 10:01
ok merciii ca m'a bien aidée
0