Déclaration en C : problème

Résolu
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);
}
Configuration: Linux Mandriva
Firefox 2.0.0.13

10 réponses

  1. schmitou Messages postés 151 Statut Membre 34
     
    c'est quoi l'erreur qui t'est signaler?
    0
    1. firk
       
      c'est dans la main() :


      expected identifier or ‘(’ before ‘int’
      error: ‘statut1’ undeclared (first use in this function)
      error: (Each undeclared identifier is reported only once
      error: for each function it appears in.)
      error: ‘R’ undeclared (first use in this function)
      0
  2. Nabla's Messages postés 18201 Date d'inscription   Statut Contributeur Dernière intervention   3 228
     
    char* status[6]={"CDI_hors_ess_ou_preavis_lic,CDD_CNE_ou_CDI_essai,Etudiant,TNS,Retraités,D­ouze_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","D­ouze_mois_sans_incident_paiement"};
    0
  3. schmitou Messages postés 151 Statut Membre 34
     
    essai ca:

    char status[]={"CDI_hors_ess_ou_preavis_lic","CDD_CNE_ou_CDI_essai","­Etudiant","TNS","Retraités","D­ouze_mois_sans_incident_paiement"};
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. Nabla's Messages postés 18201 Date d'inscription   Statut Contributeur Dernière intervention   3 228
     
    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
    0
    1. firk
       
      Merci pour ta contribution, mais tu n'as pas bon.
      J'ai résolu moi-même le problème.

      A +.
      .
      0
  6. Nabla's Messages postés 18201 Date d'inscription   Statut Contributeur Dernière intervention   3 228
     
    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 ?
    0
    1. firk
       
      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é!!!
      0
  7. Nabla's Messages postés 18201 Date d'inscription   Statut Contributeur Dernière intervention   3 228
     
    attention ! il faut faire une allocation memoire pour le R. Scanf ne la fera pas a ta place , il lui faut un buffer.
    0
    1. firk
       
      C'est ce que je viens de remarquer en testant le programme.
      Il faut en effet que je fasse l'allocation pour les revenus, ainsi que pour le loyer.

      Qu'est-ce qu'un buffer au fait?
      0
  8. Nabla's Messages postés 18201 Date d'inscription   Statut Contributeur Dernière intervention   3 228
     
    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...
    0
    1. firk
       
      Comment tu crées un buffer pour les revenus, et pour le loyer?
      Le réglage de l'allocation mémoire semble ne pas suffire, puisque pour le loyer, avant que je rentre ma valeur, la valeur
      -1209769355.
      Idem pour le revenu 1 : -1076081768
      Idem pour le revenu 2 : -1209856628.

      Qu'est-ce que tu proposes?
      0
  9. Nabla's Messages postés 18201 Date d'inscription   Statut Contributeur Dernière intervention   3 228
     
    colles moi ton code actuel, je te soupsonne d afficher un pointer ... et non ce qu il pointe
    0
    1. firk
       
      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);
      }
      0
  10. Nabla's Messages postés 18201 Date d'inscription   Statut Contributeur Dernière intervention   3 228
     
    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",&st­atus[2]);
    scanf("%s",&status[3]);
    scanf("%s",&status[4]);
    scanf("%s&­quot;,&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
    0
    1. firk
       
      les scanf sont inclus dans le commentaire, donc le souci n'est pas là!


      scanf("%s",&status[0]);
      scanf("%s",&status[1]);
      scanf("%s",&st­atus[2]);
      scanf("%s",&status[3]);
      scanf("%s",&status[4]);
      scanf("%s&­quot;,&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?
      0