Incompréhension en C

Fermé
golgotha1 Messages postés 7 Date d'inscription mardi 15 juillet 2008 Statut Membre Dernière intervention 16 juillet 2008 - 16 juil. 2008 à 15:08
golgotha1 Messages postés 7 Date d'inscription mardi 15 juillet 2008 Statut Membre Dernière intervention 16 juillet 2008 - 16 juil. 2008 à 17:49
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 :

#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

kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
16 juil. 2008 à 17:10
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
0
golgotha1 Messages postés 7 Date d'inscription mardi 15 juillet 2008 Statut Membre Dernière intervention 16 juillet 2008
16 juil. 2008 à 17:36
Je procède comment alors?
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527 > golgotha1 Messages postés 7 Date d'inscription mardi 15 juillet 2008 Statut Membre Dernière intervention 16 juillet 2008
16 juil. 2008 à 17:37
En faisant le contraire:

if(!strcmp(statut1,status[2]) && !strcmp(statut2,status[2]))
0
golgotha1 Messages postés 7 Date d'inscription mardi 15 juillet 2008 Statut Membre Dernière intervention 16 juillet 2008 > kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016
16 juil. 2008 à 17:49
Justement, pour le cas 2 Etudiants, il me faut quelle que soit la configuration afficher le message Demande de Caution Solidaire.

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 )
0