Défilement à l'infini; problème d'allocation

firk -  
 firk -
Bonjour,

1) Voilà j'aimerais savoir à quoi correspond l'incident suivant :
Lorsque j'exécute mon programme, pour un cas précis, je rentre des valeurs, et , normalement, au bout du compte, je devrais obtenir une phrase précise. Malheureusement, j'obtiens 2 phrases qui défilent tout le temps et qui ne s'arrêtent que lorsque j'exécute la commande ctrl+z.

Pourtant sur le programme, ce cas marche pour 2 autres cas(les 3 cas sont les mêmes, à la différence près que la situation de la personne change)
Pouvez-vous m'indiquer comment résoudre cette difficulté?

2) J'ai un autre problème : en effet, lorsque je rentre des valeurs(entières), avant de rentrer ma valeur, il s'affiche des valeurs complètement bizarres du style :

Indiquer le loyer L du foyer : 134524968
55
Indiquer le revenu R[0] du colocataire1 : 134564976
2312
Indiquer le revenu R[1] du colocataire2 : 134604984
0


Noter que 55, 2312 et 0 sont les valeurs que j'ai rentrées
S'agit-il d'un problème d'allocation? Si oui, pouvez-vous me corriger :

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


sachant que ma fonction est loc(int R[],int L,char *statut1,char *statut2).

J'ai réussi à allouer de la mémoire pour les chaînes de caractères comme tel :

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

1 réponse

kilian Messages postés 8854 Statut Modérateur 1 526
 
Salut,

Il ya déjà un soucis avec L qui devrait un pointeur sur entier et non pas un entier.
Idem R devrait être un tableau de pointeur d'entier. Tu dois aussi avoir un soucis dans l'usage de la fonction de récupération de ce que donne l'utilisateur.

Tu pourrais nous montrer la source complète?
0
firk
 
Salut kilian,

Excuse-moi, mais j'étais parti en weekend, c'est pourquoi je n'ai pas pu te répondre plus tôt.
J'espère que tu pourras m'aider, la situation devient critique. J'ai déjà envoyé mon code, mais je n'ai aucune réponse.
Je compte vraiment sur toi, et je t'envoie le code : (réponds-moi dans la journée stp)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>



char* status[]={"CDI_hors_ess_ou_preavis_lic","CDD_CNE_ou_CDI_essai","Etudiant","TNS","Retraités","enplace_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); PB d'allocation pour status[i], i=0,...,5?


 colocation(int R[],int L,char *statut1,char *statut2)
{
/* Cas 2 En place */

  if(strcmp(statut1,status[5]) && 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");
        }
   




{
/* Cas 2 Etudiants*/

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

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

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

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

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

       }

 }


{

/* Cas 2 C.D.I */

  if(strcmp(statut1,status[0]) && strcmp(statut2,status[0]))

   { 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 avec n'importe qui */

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

       { if(R[0]<2*L && R[1]<2*L)
           printf("Impossibilité de soumettre votre dossier\n");

         while((R[0]<2*L && R[1]>=2*L) || (R[1]<2*L && R[0]>=2*L))
	 { printf("Demande de Caution Solidaire\n");
	     printf("Impossibilité de soumettre votre dossier\n");
	 }

        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)))
         { printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");
	    printf("Demande de Caution Solidaire\n");
	
	 }

    }
   }
 }



{


/* Cas 2 T.N.S */

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

   { 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 T.N.S avec n'importe qui */

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

       { if(R[0]<2*L && R[1]<2*L)
           printf("Impossibilité de soumettre votre dossier\n");

         while((R[0]<2*L && R[1]>=2*L) || (R[1]<2*L && R[0]>=2*L))
	 { printf("Demande de Caution Solidaire\n");
	    printf("Impossibilité de soumettre votre dossier\n");
	 }


	}

        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)))
         { printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");
	    printf("Demande de Caution Solidaire\n");
	 }

    }
   }
 }


{


/* Cas 2 Retraités */

  if(strcmp(statut1,status[4]) && strcmp(statut2,status[4]))

   { 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 Retraité avec n'importe qui */

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

       { if(R[0]<2*L && R[1]<2*L)
           printf("Impossibilité de soumettre votre dossier\n");

         while((R[0]<2*L && R[1]>=2*L) || (R[1]<2*L && R[0]>=2*L))
	 { printf("Demande de Caution Solidaire\n");
	   printf("Impossibilité de soumettre votre dossier\n");
	 }

        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)))
         { printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");
	    printf("Demande de Caution Solidaire\n");
	 }

    }
   }
 }

/* Cas 2 C.D.D */

    { if(strcmp(statut1,status[1]) && strcmp(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 dominé */

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

      { if(R[1]<2*L && R[0]<2*L)
          printf("Impossibilité de soumettre votre dossier\n");
        while((R[0]<2*L || R[0]>=2*L || R[0]>3*L && R[1]>=2*L) || ((R[1]<2*L || R[1]>=2*L || R[1]>3*L && R[0]>=2*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 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);

}
0