Incompréhension en C
golgotha1
Messages postés
7
Statut
Membre
-
golgotha1 Messages postés 7 Statut Membre -
golgotha1 Messages postés 7 Statut Membre -
Bonjour,
Je ne comprends pas pour le programme suivant, lorsque je mets le cas 2 Etudiants, j'obtiens le
message "Vous remplissez...assurance" alors qu'en fait je dois obtenir "Caution Solidaire".
Autre incompréhension : j'ai 1 problème d'allocation pour le loyer L et pour les revenus R[0] et R[1]
lors de l'exécution du programme.
Pouvez-vous au plus vite résoudre ces problèmes?
Je vous livre le code :
Je ne comprends pas pour le programme suivant, lorsque je mets le cas 2 Etudiants, j'obtiens le
message "Vous remplissez...assurance" alors qu'en fait je dois obtenir "Caution Solidaire".
Autre incompréhension : j'ai 1 problème d'allocation pour le loyer L et pour les revenus R[0] et R[1]
lors de l'exécution du programme.
Pouvez-vous au plus vite résoudre ces problèmes?
Je vous livre le code :
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
/* Quelques cas particuliers */
char* status[]={"CDI_hors_ess_ou_preavis_lic","CDD_CNE_ou_CDI_essai","Etudiant","T.N.S","Retraités","enplace_depuis_ plus_de_Douze_mois_sans_incident_paiement"};
colocation(int R[],int L,char *statut1,char *statut2)
{
/* Cas 2 En place */
{ if(strcmp(statut1,status[5]) && strcmp(statut2,status[5]))
{ if(((R[0]<2*L) || (R[0]>=2*L) || (R[0]>3*L)) && ((R[1]<2*L) || (R[1]>=2*L) || (R[1]>3*L)))
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])))
{ if((R[0]<2*L || R[0]>=2*L || R[0]>3*L) && (R[1]<2*L || R[1]>=2*L || R[1]>3*L))
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");
}
}
}
/* Cas 2 Etudiants*/
if(strcmp(statut1,status[2]) && strcmp(statut2,status[2]))
{ if(((R[0]<2*L) || (R[0]>=2*L) || (R[0]>3*L)) && ((R[1]<2*L) || (R[1]>=2*L) || (R[1]>3*L)))
printf("Demande de Caution Solidaire\n");
}
}
main()
{ int L; int *R;
char *status[6];char *statut1;char *statut2;
statut1=(char*)malloc(6*(sizeof(char)));
statut2=(char*)malloc(6*(sizeof(char)));
L=(int) malloc(10000*(sizeof(int))); /* A vérifier -> problème d'allocation persiste(pour L,R[0],R[1])*/
R[0]=(int) malloc(10000*(sizeof(int)));
R[1]= (int)malloc(10000*(sizeof(int)));
printf("Indiquer la situation du premier colocataire : %s",statut1);
scanf("%s",statut1);
printf("Indiquer la situation du deuxième colocataire : %s",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);
}
1 réponse
Salut,
strcmp retourne 0 lorsque deux chaines sont égales, et autre chose si elles sont inégales donc il faut que tu revoies ton code à ce niveau.
De même malloc retourne des pointeurs, donc il ne retourne jamais un entier. Là aussi il faut que tu revoies ton main.
https://openclassrooms.com/fr/courses
https://openclassrooms.com/fr/courses
strcmp retourne 0 lorsque deux chaines sont égales, et autre chose si elles sont inégales donc il faut que tu revoies ton code à ce niveau.
De même malloc retourne des pointeurs, donc il ne retourne jamais un entier. Là aussi il faut que tu revoies ton main.
https://openclassrooms.com/fr/courses
https://openclassrooms.com/fr/courses
Pour les allocations, le loyer est 1 entier, mais j'ai toujours le même problème.
En supprimant la ligne d'allocation dans la main, en mettant int *L dans la fonction colocation, j'obtiens 1 tas d'erreurs lorsque je fais 1 multiplication.(Pb d'opérande )