Rectifier programme

firk -  
mich62120 Messages postés 636 Statut Membre -
Bonjour,

Je vous expose une partie de mon programme. Pouvez-vous m'indiquer comment insérer ma série de documents (de A à K) dans ma structure dossier?#include<stdio.h>
#include<stdlib.h>

struct dossier
{ char *A;char *B;char *C;
char *D;char *E;char *F;
char *G;char *H;char *I;
char *J;char *K;
};

char *statut[]={ "CDI hors période d'essai ou préavis de licenciement",
"CDD, CNE, ou CDI en période d'essai",
"Etudiant",
"TNS",
"Retraités et autres pensionnés",
"En place depuis 12 mois, sans incident de paiement"};

voici ma série de docs :

{ struct dossier D
{
A={"3 derniers bulletins de salaire"};
B={"2 derniers avis d'imposition sur le revenu"};
C={"Contrat de travail ou Attestation d'employeur(datant de moins d'un mois)"};
D={"Pensions ou allocations diverses"};
E={"Dernier décompte de la(les) caisse de retraite(s)"};
F={"Fiche de renseignements"};
G={"R.I.B, R.I.P ou R.I.C.E"};
H={"Pièce d'identité"};
I={"Carte d'étudiant"};
J={"Acte de Caution Solidaire"};
K={"Attestation d'assurance Habitation"};

}
};

void init_struct(dossier * D){ scanf("%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s",&dossier.A,&dossier.B,&dossier.C,&dossier.D,&dossier.E,&dossier.F,&dossier.G,
&dossier.H,&dossier.I,&dossier.J,&dossier.K);
}
A voir également:

15 réponses

kazouu Messages postés 466 Statut Membre 12
 
je t'avoue que je suis un peu perdu dans ce que tu veux faire ! tant que tu n'arriveras pas a m'expliquer clairement ce que tu veux faire ...
2
firk
 
comme je l'ai dit à mich62120, je veux juste vérifier la composition du dossier de chaque type d'individu et voir s'ils ont tel ou tel document.(en établissant une liste des docs à fournir pour notre agence)
0
kazouu Messages postés 466 Statut Membre 12
 
bonjour firk désolé pour le post de vendredi mais j'été parti en week end :)

tu veux mettre quoi exactement dans D.A ?

A={"3 derniers bulletins de salaire"};
ou ce que tu récupère dans le scanf ?
0
firk
 
Je veux faire en sorte que je puisse répertorier mes documents dans la structure dossier.
D.A correspond au document "bulletins", et ainsi de suite pour les autres docs.
0
kazouu Messages postés 466 Statut Membre 12
 
oui mais tu veux stocker quoi exactement ?

quand tu feras printf(D.A); ca affichera quoi ?

3 derniers bulletins de salaire ou ce qu'il a rentrer dans le scanf ?
0
firk
 
3 bulletins de salaire, et ainsi de suite pour les autres docs.
les printf("D.A"), je les affiche dans la main(), ou non?
0
kazouu Messages postés 466 Statut Membre 12
 
ya un truc que j'arrive pas a comprendre c'est que tu init ton champ

A={"3 derniers bulletins de salaire"};

et que après tu fais un scanf dossier.A ( qui d'ailleurs ne veut rien dire ça serai plutôt scanf D.A )

scanf("%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s",&dossier.A,&dossier.B,&dossier.C,&dossi­er.D,&dossier.E,&dossier.F,&dossier.G,
&dossier.H,&dossier.I,&dossier.J,&dossier.K);
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
firk
 
la console m'affiche les erreurs suivantes:

loc3.c:20: error: redefinition of ‘struct dossier’
loc3.c:21: error: expected specifier-qualifier-list before ‘A’
loc3.c:35: error: expected ‘)’ before ‘*’ token
0
mich62120 Messages postés 636 Statut Membre 6
 
Salut,

C'est pour ça que je pensais la derniere fois qu'il voulait acceder a ses fichiers via la strucure.
Je suis vos conversations mais j'avoue que je ne comprende toujours pas grand chose:

Veux tu etre capable de dire quels documents à une personne avec la structure ou acceder à ces documents via la stucture

dossier.A n'est-il pas déjà un pointeur sur char?
Je ne suis pas sur qu'il faille un &.

Mich
0
firk
 
pour le statut 1, ce sont les documents suivants : A, B,C,D,F,G,H,J,K.
pour le statut 2 : idem que statut 1.
pour le statut 3 : C,D,F,G,H,I,J,K.
pour le statut 4: B,C,D,F,G,H,J,K.
pour le statut 5 : A,B,D,E,F,G,H,,J,K.
pour le statut 6 : tous les docs.

Amoins de créer un tableau de chaines de caractères pour chaque statut, mais cela risque d'être un peu fastidieux!
0
mich62120 Messages postés 636 Statut Membre 6 > firk
 
Tu ne veux pas les ouvrir les fichiers tu veux juste avoir une liste?
0
firk > mich62120 Messages postés 636 Statut Membre
 
oui, je veux juste vérifier la composition du dossier de chaque type d'individu et voir s'ils ont tel ou tel document.
0
kazouu Messages postés 466 Statut Membre 12
 
declare ta structure comme ca

typedef struct dossier
{ char *A;char *B;char *C;
char *D;char *E;char *F;
char *G;char *H;char *I;
char *J;char *K;
};

comme ça après tu peux déclaré

dossier D;
et après remplir tes champ comme ceci
D.A="3 derniers bulletins de salaire";
D.B
....;
0
kazouu Messages postés 466 Statut Membre 12
 
mais a quoi sert ca :

{ struct dossier D
{
A={"3 derniers bulletins de salaire"};
B={"2 derniers avis d'imposition sur le revenu"};
C={"Contrat de travail ou Attestation d'employeur(datant de moins d'un mois)"};
D={"Pensions ou allocations diverses"};
E={"Dernier décompte de la(les) caisse de retraite(s)"};
F={"Fiche de renseignements"};
G={"R.I.B, R.I.P ou R.I.C.E"};
H={"Pièce d'identité"};
I={"Carte d'étudiant"};
J={"Acte de Caution Solidaire"};
K={"Attestation d'assurance Habitation"};
}
};

???
0
mich62120 Messages postés 636 Statut Membre 6
 
Il veut que chaque dossier contienne les pieces demandable a une personne selon son status.
Pour faire des formulaire peut etre non?

En fait si il n'est pas étudiant il n'a pas de carte etudiant et I=null;
Il pourra ensuite savoir ce qu'il a en parcourant le contenu des dossiers.

Mais pour cela ce n'était pas la peine de mettre des phrases dans la structure, cela complique les choses.

mich
0
firk > mich62120 Messages postés 636 Statut Membre
 
tu m'as compris, mais comment traduire cela en langage C?
0
kazouu Messages postés 466 Statut Membre 12
 
oui voila ce que je ne comprend pas, tu fais juste un structure avec des int , si tu sais a quoi correspond chaque champ pas la peine de mettre des phrase tu met des int et si l'utilisateur en a il met combien et sinon il met rien et tu met null
0
firk
 
peux-tu me donner une piste pour traduire ce que tu viens d'énoncer en langage C?
Je veux au final générer des pages dynamiques.(il faut que je crée une interface passerelle de type CGI, avnat de le transposer sous le format php)
0
kazouu Messages postés 466 Statut Membre 12
 
typedef struct dossier
{int A;int B;int C .....
};

et apres tu fais

printf("bulletin de salaire");
scanf("%d",&dossier.A);
...
...
...
0
firk
 
en appliquant ton conseil à la lettre, cad comme suit :
#include<stdio.h>
#include<stdlib.h>

char *statut[]={ "CDI hors période d'essai ou préavis de licenciement",
"CDD, CNE, ou CDI en période d'essai",
"Etudiant",
"TNS",
"Retraités et autres pensionnés",
"En place depuis 12 mois, sans incident de paiement"};

typedef void struct dossier
{ int A;int B;int C;int D;int E;int F;int G;int H;int I;int J;int K;
}
main(){
printf("3 derniers bulletins de salaire");scanf("%d",dossier.A);
printf("2 derniers avis d'imposition sur le revenu");scanf("%d",&dossier.B);
printf("Contrat de travail ou Attestation d'employeur(datant de moins d'un mois)");scanf("%d",&dossier.C);
printf("Pensions ou allocations diverses");scanf("%d",&dossier.D);
printf("Dernier décompte de la(les) caisse de retraite(s)");scanf("%d",&dossier.E);
printf("Fiche de renseignements");scanf("%d",&dossier.F);
printf("R.I.B, R.I.P ou R.I.C.E");scanf("%d",&dossier.G);
printf("Pièce d'identité");scanf("%d",&dossier.H);
printf("Carte d'étudiant");scanf("%d",&dossier.I);
printf("Acte de Caution Solidaire");scanf("%d",&dossier.J);
printf("Attestation d'assurance Habitation");scanf("%d",&dossier.K);
}

J'obtiens à la console :


loc3.c:14: error: two or more data types in declaration specifiers
loc3.c:14: error: function definition declared ‘typedef’
loc3.c: In function ‘main’:
loc3.c:15: error: ‘dossier’ undeclared (first use in this function)
loc3.c:15: error: (Each undeclared identifier is reported only once
loc3.c:15: error: for each function it appears in.)
loc3.c:14: warning: return type of ‘main’ is not ‘int’
0
mich62120 Messages postés 636 Statut Membre 6 > firk
 
Cette solution t'oblige a le rentrer à la main aussi.
sinon pour les erreurs il faut que tu declare une variable D de type dossier et et que tu remplace tous les dossiers. par D.

Il y a un & d'oublié au premier scanf.

Mich
0
kazouu Messages postés 466 Statut Membre 12
 
j'aurais plutot fait

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

char *statut[]={ "CDI hors période d'essai ou préavis de licenciement",
"CDD, CNE, ou CDI en période d'essai",
"Etudiant",
"TNS",
"Retraités et autres pensionnés",
"En place depuis 12 mois, sans incident de paiement"};

typedef struct dossier
{
int A;
int B;
int C;
int D;
int E;
int F;
int G;
int H;
int I;
int J;
int K;
}
main(){
dossier d;
printf("3 derniers bulletins de salaire");scanf("%d",d.A);
printf("2 derniers avis d'imposition sur le revenu");scanf("%d",d.B);
printf("Contrat de travail ou Attestation d'employeur(datant de moins d'un mois)");scanf("%d",d.C);
printf("Pensions ou allocations diverses");scanf("%d",&d.D);
printf("Dernier décompte de la(les) caisse de retraite(s)");scanf("%d",&d.E);
printf("Fiche de renseignements");scanf("%d",&d.F);
printf("R.I.B, R.I.P ou R.I.C.E");scanf("%d",&d.G);
printf("Pièce d'identité");scanf("%d",&d.H);
printf("Carte d'étudiant");scanf("%d",&d.I);
printf("Acte de Caution Solidaire");scanf("%d",&.J);
printf("Attestation d'assurance Habitation");scanf("%d",&.K);
}
0
mich62120 Messages postés 636 Statut Membre 6
 
J'ai essayé de faire un petit truc, il n'est pas testé il doit y avoir des erreurs mais si tu veux voir.

Le but est d'associer a la personne uniquement un chiffre a partir duquel on peut retrouver ses documents grace a une fonction docs_personne()

typedef struct   
{int stat
 char* nom;  //faire une fonction pour le nom
}personne ; 

enum statut {CDI_hors_ess_ou_preavis_lic,CDD_CNE_ou_CDI_essai,Etudiant,TNS,Retraités,12_mois_sans_incident_paiement}; //donne des valeurs allant de 0 à 5 aux différents status


//tableaux contenant les intitulés des documentschar* docs_possible[11]={ 
"3 derniers bulletins de salaire",
"2 derniers avis d'imposition sur le revenu",
"Contrat de travail ou Attestation d'employeur(datant de moins d'un mois)", 
"Pensions ou allocations diverses", 
"Dernier décompte de la(les) caisse de retraite(s)", 
"Fiche de renseignements", 
"R.I.B, R.I.P ou R.I.C.E", 
"Pièce d'identité", 
"Carte d'étudiant", 
"Acte de Caution Solidaire", 
"Attestation d'assurance Habitation"};
 

void init_personne(personne * p,int status){ //valeur correspondant au indice du tableau de docs dont on ne veut pas
switch(status){
    case 0:p.status=48
    case 1:p.status=48
    case 2:p.status=401
    case 3:p.status=084
    case 4:p.status=28
    case 5:p.status=000
   
}

void docs_personne(personne p){
int i,a,b,c;
                  //récupération des indices a ne pas afficher
a=p.status%10;

   if(a==0){
       b=0;c=0;}
   else{
       b=((p.status-a)/10)%10;
        if(a==8)   //si a = 8 pas besoin de c
          c=12;
          else
           c=((p.status-10*b-a)/100)%10;

       }


  //affichage
   printf("docs fournissables par la personne:\n")

   for(i=0;i<11;i++)
     if(i!=a&&i!=b&&i!=c)
        printf("%s",docs_possible[i];



}
0
firk
 
Merci pour ton conseil, le programme a l'air pas mal du tout.

Après quelques corrections, comme par exemple :

int status dans la structure, char*status,l'instruction break après chaque case.la main() avant docs_personne, l'adresse & lors du dernier printf, la déclaration de struct p et de status[6],

je n'arrive pas à exécuter le programme! (la compilation étant bonne)
Je suis bloqué actuellement.
0
mich62120 Messages postés 636 Statut Membre 6 > firk
 
Salut firk,

pour les break et le& tu as raison mais je ne comprend pas ou tu veux mettre le main();

il ne doit pas être avec docs personnes tu prendrex ce que j'ai fait dans un programme a part et le mettre en include dans ton main qui se servira de ces enum, struct et fonction.

De même je ne vois pas pourquoi tu veux declarer un status[6],et pourquoi tu veux mettre char* status.

Mich
0
firk > mich62120 Messages postés 636 Statut Membre
 
Salut mich,

Disons que je me suis arrangé pour que le programme puisse être compilable via la commande gcc; cependant je n'arrive pas à exécuter le programme. Peux-tu me dire pourquoi?
0
mich62120 Messages postés 636 Statut Membre 6
 
Je ne vois pas l'interet de tes changements.
int status en char* et tu perds le principe qui de garder le staus en un int.

Peut tu mettre le prog changé stp

Mich
0
firk
 
Je te réèle le programme modifié :

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

main(){

typedef struct
{int status;
char* nom; //faire une fonction pour le nom
}personne ;

char *status[]= {"CDI_hors_ess_ou_preavis_lic,CDD_CNE_ou_CDI_essai,Etudiant,TNS,Retraités,douze_mois_sans_incident_paiement"};
//donne des valeurs allant de 0 à 5 aux différents status


//Tableaux contenant les intitulés des documents
char* docs_possible[11]={
"3 derniers bulletins de salaire",
"2 derniers avis d'imposition sur le revenu",
"Contrat de travail ou Attestation d'employeur(datant de moins d'un mois)",
"Pensions ou allocations diverses",
"Dernier décompte de la(les) caisse de retraite(s)",
"Fiche de renseignements",
"R.I.B, R.I.P ou R.I.C.E",
"Pièce d'identité",
"Carte d'étudiant",
"Acte de Caution Solidaire",
"Attestation d'assurance Habitation"};


void init_personne(personne p,int status){ //valeur correspondant au indice du tableau de docs dont on ne veut pas
switch(status){
case 0:printf("personne.status=48");break;
case 1:printf("personne.status=48");break;
case 2:printf("personne.status=401");break;
case 3:printf("personne.status=084");break;
case 4:printf("personne.status=28");break;
case 5:printf("personne.status=000");break;

}
}

void docs_personne(personne p){
int i,a,b,c;struct p;status[6];
//récupération des indices a ne pas afficher
a=(p.status)%10;

if(a==0){
b=0;c=0;}
else{
b=((p.status-a)/10)%10;
if(a==8) //si a = 8 pas besoin de c
c=12;
else
c=((p.status-10*b-a)/100)%10;

}

//affichage
printf("docs fournissables par la personne:\n");

for(i=0;i<11;i++)
{if(i!=a && i!=b && i!=c)
printf("%s",&docs_possible[i]);
}
}
}
0
mich62120 Messages postés 636 Statut Membre 6
 
L'enum ne servait qu'à la lisibilté du prog pour quand tu utiliserai les fonctions dans le main si tu le mets pas ne le remplace pas par le tableau de char* qui ne sert à rien.

Ton main ne devrai pas englober la fonction init et il serait même plus judicieux de l faire a part;de faire un fichier..c avec le prog que tu as (doc.c) et faire ton main ailleurs

main.c::

#include doc.c

main(){

...


J'ai vu que tu developper aussi de s fonctions pour nom addresse , je suppose qu'il t'en faut une pour recupérer le status (en interne donc c'est in int).

je te propose:

void set_status(personne p){
   
     printf("choisir status:\n1-cdi.........\n");  //faire un menu pour donner les correspondance des nums et des status
    scanf("%d",&p.status);
}

je ne suis pas sur du & et que l'on ne doive pas forcment passer la structure par un pointeur, renseigne toi la dessus si ca e marche pas.

Mich
0
firk
 
je ne suis pas sur du & et que l'on ne doive pas forcment passer la structure par un pointeur, renseigne toi la dessus si ca e marche pas.


de quel & veux-tu parler?


au niveau de la fonction adresse, je voudrais afficher comme ce qui suit :
aaaaa bbb, bbbbbbbbbbbbbbbbbbbbbbbbbbbb
aaaaa bbbbbbbbbbbbbbbbbbbbbb

a désigne un nombre, b une lettre.

mes fonctions nom, prénom, adresse me donnent des problèmes au niveau de la compilation.

char nom(int i, char N[])
{ for(i=0; i<30;i++)
scanf("%s", &N[i]);
}
char prénom(int j, char P[])
{ for(j=0;j<20;j++)
scanf("%s", &P[j]);
}

char adresslot(int argc, char *argv[])
{ int j;scanf("%s", argv[j]);scanf("%d", &argc[j]);
while(argc<6)
argv[j]=atoi(*argc);
if(argc==6)
printf(" ");
while(argc>6)
argc=strcpy(*argv[j]);
}

char adressprop(int argc1, char *argv1[])
{ int i;scanf("%s", &argv1[i]);scanf("%d",&argc1);
while(argc1<6)
argv1[i]=atoi(*argc1);
if(argc1==6)
printf(" ");
while(argc1>6)
argc1=strcpy(*argv1[i]);
0
mich62120 Messages postés 636 Statut Membre 6 > firk
 
Je parlais du & du dernier scanf mais je pense que c'est bon, ce que je suis pas sur c'est si on doit passer en argument :

personne p ou personne* p car je ne sais pas p et déjà un pointeur ou si il sera uniquement recopier comme argument et donc que les traitements dans la fonction n'aurait aucun effet.

Pour les autres fonctions je vais regarder tout a l'heure, dsl mais je n'ai pas le temps tout de suite.
0
mich62120 Messages postés 636 Statut Membre 6
 
Salut firk,

Désolé de ne pas être revenu avant mais je n'avais pas le temps de voir pour ton code.
Je m'y suis mis un peu ce matin et je suis tombé sur ce topic qui pourrait t'interresser.

On y trouve une méthode qui demande nom, prénom et tel et le mets dans un fichier .dat .
Il ne te resterai plus qu'à changer grossièrement pour te l'adapter.
Il reste encore le problème de l'adresse que je vais essayer de voir après.

Mich
0