Déclaration en C : problème

Résolu
firk -  
 firk -
Bonjour,

Je ne vois pas les problèmes de déclaration que m'indique la console. Pouvez-vous m'éclairer, svp?
Je serai là d'ici une heure et demie(pause déj...)

char* status[6]={"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

colocation(int R[],int L,char *statut1,char *statut2) // je passe outre la fonction
{
}

main()
{ int i;int L, int (R[1]),int (R[2]);
char*status[6];

scanf("%s",&(*statut1));
printf("Indiquer la situation du premier colocataire : %s\n",*statut1);
scanf("%s",&(*statut2));
printf("Indiquer la situation du deuxième colocataire : %s\n",*statut2);

scanf("%d",&L);
printf("Indiquer le loyer du foyer : %d\n",L);
scanf("%d",&R[1]);
printf("Indiquer le revenu du colocataire1 : %d\n",R[1]);
scanf("%d",&R[2]);
printf("Indiquer le revenu du colocataire2 : %d\n",R[2]);

colocation(R,L,*statut1,*statut2);
}

10 réponses

schmitou Messages postés 151 Statut Membre 34
 
c'est quoi l'erreur qui t'est signaler?
0
firk
 
c'est dans la main() :


expected identifier or ‘(’ before ‘int’
error: ‘statut1’ undeclared (first use in this function)
error: (Each undeclared identifier is reported only once
error: for each function it appears in.)
error: ‘R’ undeclared (first use in this function)
0
Nabla's Messages postés 20731 Statut Contributeur 3 193
 
char* status[6]={"CDI_hors_ess_ou_preavis_lic,CDD_CNE_ou_CDI_essai,Etudiant,TNS,Retraités,D­ouze_mois_sans_incident_paiement"};

moi je mettrai des guillemets :
char* status[6]={"CDI_hors_ess_ou_preavis_lic","CDD_CNE_ou_CDI_essai","Etudiant","TNS,Retraités","D­ouze_mois_sans_incident_paiement"};
0
Nabla's Messages postés 20731 Statut Contributeur 3 193
 
t as pas l impression de dupliquer tes posts ?
http://www.commentcamarche.net/forum/affich 7226728 urgent programme en c
0
schmitou Messages postés 151 Statut Membre 34
 
essai ca:

char status[]={"CDI_hors_ess_ou_preavis_lic","CDD_CNE_ou_CDI_essai","­Etudiant","TNS","Retraités","D­ouze_mois_sans_incident_paiement"};
0

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

Posez votre question
Nabla's Messages postés 20731 Statut Contributeur 3 193
 
scanf("%s",&(*statut1));

->scanf("%s",&(*statut[1]));
il faut mettre les crochets pour acceder a un tableau

int (R[1]),int (R[2]) //tu defini 2 fois le tableau R!
->int r[3] //entre les crochets, tu met la taille du tableau. tu ne declare pas cellule par cellule
j ai mis 3 pke tu utilises r[2].
no oublies pas qu un tableau de taille n commence a 0 et fini a n-1
0
firk
 
Merci pour ta contribution, mais tu n'as pas bon.
J'ai résolu moi-même le problème.

A +.
.
0
Nabla's Messages postés 20731 Statut Contributeur 3 193
 
et ben au lieu de me chamber et de me dire que je n ai pas bon, donnes nous les correction que tu as apporté, ca servira peute tre a quelqun

j ai apporté des corrections rapides, mais quand on voit certains trucs que tu ecris:
l adresse du contenu d un pointeur.. c est a dire un pointeur. ca c est dans ta fonction ici:scanf("%s",&(*statut[1]));

c est vrai qu il aurai mieu valu faire scanf("%s",statut[1]); //avec statut etant un tableau de poointeurs, car tu met des chaines dedan.

en plus dans ton code, il y a du statut et du status

ensuite, je ne suis pas sur que tu puisse ecrire dans statut, vu que tu l a alloué en"brut" dans ton code.

tu veux que je regqrde encore plus pour te montrer a quel point ton programme est moche ?
0
firk
 
Excuse-moi, mais c'est si vivifiant de pouvoir réussir soi-même; tes derniers commentaires m'ont permis de résoudre le problème de segmentation. en effet, j'avais mis scanf("%s,&(statut1));
Alors qu'en fait, il fallait faire scanf("%s",statut1);

Pour le problème du revenu, j'ai juste déclaré ceci : int *R;

Reste qu'avec ces seuls changements, l'erreur de segmentation reste. C'est sans doute un problème d'allocation dynamique : j'ai introduis ces 2 lignes supplémentaires :
statut1=(char*)malloc(6*(sizeof(char)));
statut2=(char*)malloc(6*(sizeof(char)));

Et le tour est joué!!!
0
Nabla's Messages postés 20731 Statut Contributeur 3 193
 
attention ! il faut faire une allocation memoire pour le R. Scanf ne la fera pas a ta place , il lui faut un buffer.
0
firk
 
C'est ce que je viens de remarquer en testant le programme.
Il faut en effet que je fasse l'allocation pour les revenus, ainsi que pour le loyer.

Qu'est-ce qu'un buffer au fait?
0
Nabla's Messages postés 20731 Statut Contributeur 3 193
 
un buffer est une zone memoire pour le transit des donnés.... ou elles sont stockées de manière temporaire avant traitement.

de manière plus concrète, c est un enorme tableau. sa taille depend de ce que tu traite.. si c est pour des entrés clavier, je met char buffer[80]; si c est pour des donnés reseau, je passe facilement a 1024...
0
firk
 
Comment tu crées un buffer pour les revenus, et pour le loyer?
Le réglage de l'allocation mémoire semble ne pas suffire, puisque pour le loyer, avant que je rentre ma valeur, la valeur
-1209769355.
Idem pour le revenu 1 : -1076081768
Idem pour le revenu 2 : -1209856628.

Qu'est-ce que tu proposes?
0
Nabla's Messages postés 20731 Statut Contributeur 3 193
 
colles moi ton code actuel, je te soupsonne d afficher un pointer ... et non ce qu il pointe
0
firk
 
voilà mon code :

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define Solvabilite_acquise 1
#define Demande_de_Caution_Solidaire 2
#define Impossible 3

char* status[6]={"CDI_hors_ess_ou_preavis_lic","CDD_CNE_ou_CDI_essai","Etudiant","TNS","Retraités","En place depuis plus de Douze_mois_sans_incident_paiement"};
//donne des valeurs allant de 0 à 5 aux différents status scanf("%s",&status[0]);scanf("%s",&status[1]);scanf("%s",&status[2]);scanf("%s",&status[3]);scanf("%s",&status[4]);scanf("%s",&status[5]);scanf("%s",&statut1);scanf("%s",&statut2);

colocation(int R[],int L,char *statut1,char *statut2)
{ int i,h,k;


/* Cas 2 En place */

if(strcmp(statut1,statut2) && strcmp(statut2,status[5]))
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");

/* Cas 1 En place avec n'importe qui */

else if((strcmp(statut1,status[5]) && !strcmp(statut2,status[5])) ||(strcmp(statut2,status[5]) && !strcmp(statut1,status[5])))
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");

while((k=*status[0]) || (k=*status[3]) || (k=*status[4]))

/* Cas 2 C.D.I(k=0), 2 T.N.S(k=3), 2 Retraités(k=4) */

{ if(strcmp(statut1,statut2) && strcmp(statut2,status[k]))

{ if(R[0]>3*L || R[1]>3*L)
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");
else
{ if(R[0]<2*L && R[1]<2*L)
printf("Impossibilité de soumettre votre dossier\n");

else { if((R[0]<2*L && R[1]>=2*L && R[1]<3*L) || (R[1]<2*L && R[0]>=2*L && R[0]<3*L))
printf("Demande de caution solidaire\n");
}
}
}

/* Cas 1 C.D.I(k=0), 1 T.N.S(k=3), 1 Retraité(k=4) avec n'importe qui */

else if((strcmp(statut1,status[k]) && !strcmp(statut2,status[k]) && statut2!=status[1] && statut2!=status[5]) || (strcmp(statut2,status[k]) && !strcmp(statut1,status[k])) && statut1!=status[1] && statut1!=status[5])

{
while( (R[0]<2*L && R[1]<=3*L)||(R[0]<2*L && R[1]<=3*L) )
{ (k=0)? 3 : 2;
(k=3)? 3 : 2;
(k=4)? 3 : 2;

}
while( (R[0]>3*L && (R[1]<=3*L || R[1]>=2*L || R[1]<2*L))||(R[1]>3*L && (R[0]<=3*L || R[0]>=2*L || R[0]<2*L)) )
{ (k=0)? 1 : 2;
(k=3)? 1 : 2;
(k=4)? 1 : 2;

}

}
}

/* Cas 2 Etudiants*/

if(strcmp(statut1,statut2) && strcmp(statut2,status[2]))
printf("Demande de caution solidaire\n");

/*Etudiant avec quelqu'un ayant un autre statut*/

else if((strcmp(statut1,status[2]) && !strcmp(statut2,status[2]) && statut2!=status[1] && statut2!=status[5]) ||((strcmp(statut2,status[2]) && !strcmp(statut1,status[2]) && statut1!=status[1] && statut1!=status[5])))

{ (R[1]>3*L || R[0]>3*L)? 1 : 2 || 3;
(R[1]<2*L || R[0]<2*L)? 3 : exit(1);
if((strcmp(statut1,status[2]) && strcmp(statut2,status[1])) || (strcmp(statut2,status[2]) && strcmp(statut1,status[1])))
(R[1]>2*L || R[0]>2*L)? 2 : 3;
}



/* Cas 2 C.D.D */

if(strcmp(statut1,statut2) && (statut2,status[1]))
{ if(R[0]<2*L && R[1]<2*L)
printf("Impossibilité de soumettre votre dossier\n");
else
{ if((R[0]<2*L && R[1]>2*L) || (R[1]<2*L && R[0]>2*L))
printf("Demande de caution solidaire\n");
}
}

/* Cas 1 C.D.D avec n'importe qui sauf En place : cas de soumission*/

else if((strcmp(statut1,status[1]) && !strcmp(statut2,status[1]) && statut2!=status[5]) || (strcmp(statut2,status[1]) && !strcmp(statut1,status[1]) && statut1!=status[5]))

{ (R[1]<2*L || R[0]<2*L)? 3 : exit(2);
while((R[0]<2*L || R[0]>=2*L || R[0]>3*L) && R[1]<3*L)
{ printf("Demande de caution solidaire\n");

}
if(strcmp(statut1,status[1]) && strcmp(statut2,status[2]))
{ while((R[0]<2*L && R[1]>=2*L))
{ printf("Impossibilité de soumettre votre dossier\n");

}

while(R[0]>=2*L || R[1]>=2*L)
printf("Demande de caution solidaire\n");
}

}

}


main()
{ int i;int L; int *R;
char *status[6];char *statut1;char *statut2;

statut1=(char*)malloc(6*(sizeof(char)));
statut2=(char*)malloc(6*(sizeof(char)));


printf("Indiquer la situation du premier colocataire : %s\n",statut1);
scanf("%s",statut1);

printf("Indiquer la situation du deuxième colocataire : %s\n",statut2);
scanf("%s",statut2);

printf("Indiquer le loyer du foyer : %d\n",L);
scanf("%d",&L);

printf("Indiquer le revenu du colocataire1 : %d\n",R[0]);
scanf("%d",&R[0]);

printf("Indiquer le revenu du colocataire2 : %d\n",R[1]);
scanf("%d",&R[1]);

colocation(R,L,statut1,statut2);
}
0
Nabla's Messages postés 20731 Statut Contributeur 3 193
 
bon, j ai pas le temps de regarder tout ca pour l isntant, tu a l air d etre debutant, il y a beaucoup a verifier.
je remarque des incoherences:

char* status[6]={"CDI_hors_ess_ou_preavis_lic","CDD_CNE_ou_CDI_essai","­Etudiant","TNS","Retraités","En place depuis plus de Douze_mois_sans_incident_paiement"};
//donne des valeurs allant de 0 à 5 aux différents status
scanf("%s",&status[0]);
scanf("%s",&status[1]);
scanf("%s",&st­atus[2]);
scanf("%s",&status[3]);
scanf("%s",&status[4]);
scanf("%s&­quot;,&status[5]);
scanf("%s",&statut1);
scanf("%s",&statut2);

tu commence par declarer ton tableau de chaines, status, et a la ligne d apres tu ecrase les valeurs que tu viens de mettre dedan. ce n est pas logique. c est l un ou c est lautre.
ensuite, scanf("%s",&statut2); je ne vois pas la declaration, peut etre n ai je pas assez cherché

(k=3)? 3 : 2; // j ai croisé une fois cette ecriture. Je ne pense pas que tu ai le niveau pour te permetre d ecrire comme ca.... c est un if / else, c est ca ? alors ecris le completement

precise moi le nom et l endroit de ta valeur qui merde... essaye de mettre une * devant la variable... je ne te garanti rienm je dis ca sans avoir localisé ou Ct dans le code
0
firk
 
les scanf sont inclus dans le commentaire, donc le souci n'est pas là!


scanf("%s",&status[0]);
scanf("%s",&status[1]);
scanf("%s",&st­atus[2]);
scanf("%s",&status[3]);
scanf("%s",&status[4]);
scanf("%s&­quot;,&status[5]);
scanf("%s",&statut1);
scanf("%s",&statut2);

la condition(k=3)? me permet de résumer la situation pour 3 statuts particuliers : cdi, tns, retraité.
Je fais comment alors?
0