Déclaration en C : problème
Résolu
firk
-
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);
}
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);
}
Configuration: Linux Mandriva Firefox 2.0.0.13
10 réponses
-
-
char* status[6]={"CDI_hors_ess_ou_preavis_lic,CDD_CNE_ou_CDI_essai,Etudiant,TNS,Retraités,Douze_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","Douze_mois_sans_incident_paiement"}; -
t as pas l impression de dupliquer tes posts ?
http://www.commentcamarche.net/forum/affich 7226728 urgent programme en c -
essai ca:
char status[]={"CDI_hors_ess_ou_preavis_lic","CDD_CNE_ou_CDI_essai","Etudiant","TNS","Retraités","Douze_mois_sans_incident_paiement"}; -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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 -
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 ?-
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é!!!
-
-
attention ! il faut faire une allocation memoire pour le R. Scanf ne la fera pas a ta place , il lui faut un buffer.
-
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... -
colles moi ton code actuel, je te soupsonne d afficher un pointer ... et non ce qu il pointe
-
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);
}
-
-
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",&status[2]);
scanf("%s",&status[3]);
scanf("%s",&status[4]);
scanf("%s",&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-
les scanf sont inclus dans le commentaire, donc le souci n'est pas là!
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);
la condition(k=3)? me permet de résumer la situation pour 3 statuts particuliers : cdi, tns, retraité.
Je fais comment alors?
-