Incompréhension en C
golgotha1
Messages postés
7
Date d'inscription
Statut
Membre
Dernière intervention
-
golgotha1 Messages postés 7 Date d'inscription Statut Membre Dernière intervention -
golgotha1 Messages postés 7 Date d'inscription Statut Membre Dernière intervention -
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); }
A voir également:
- Incompréhension en C
- Incompréhension !!! , Mémoire saturée pour rien, besoin d'aide ✓ - Forum Windows 8 / 8.1
- Incompréhension de la fin d'Another Earth - Forum Cinéma / Télé
- Incompréhension de la fin de "jeux d'enfants" - Forum Cinéma / Télé
- Incomprehension sur des attributs "protected" des classes ✓ - Forum Java
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 )