Programme C : correction

firk -  
 firk -
Bonjour,

Pouvez-vous m'aider pour ces 3 cas: (je n'ai plus d'idées pour corriger mes erreurs...)

1)char *status={"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

J'ai essayé avec enum status, mais je rencontre des erreurs au moment de la compilation du programme :
expected identifier or ‘(’ before ‘=’ token
error: stray ‘\303’ in program
error: stray ‘\251’ in program


2)J'aimerais distinguer les 6 valeurs pour déterminer l'attribut de l'individu
{ switch(status[i])
case(status[0]):
printf("Vous êtes alors en situation de %s\n",T[0]);
}
Ici 'status' undeclared (first use in this function)
error: (Each undeclared identifier is reported only once
error: for each function it appears in.)
error: expected declaration or statement at end of input

3)Ici j'ai défini plusieurs termes, mais le message d'erreur suivant apparaît :

warning: missing whitespace after the macro name

#define Solvabilité acquise 1
#define Demande de Caution Solidaire 2
#define Impossible 3
A voir également:

5 réponses

fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Salut
Pour le 1, tu dois faire un tableau deux dimensions.
char status[][50]={"CDI_hors_ess_ou_preavis_lic","CDD_CNE_ou_CDI_essai","Etudiant","TNS","Retraités"
,"Douze_mois_sans_incident_paiement"};


Pour le 2, tu dois utiliser strcmp pour comparer deux chaines de caractères. Du genre : if(strcmp("Etudiant",status[i])
Je te renvoie sur man strcmp pour son utilisation en détail.

Pour le 3,
#define Solvabililite_acquise 1
#define Demande_de_Caution_Solidaire 2
#define Impossible 3


Cdt
0
firk
 
J'avais pensé à faire avec strcmp; je pense qu'avec une boucle for(i=0;i<6;i++), ça devrait passer. Pas besoin de passer par switch.

Si j'extrapole la situation à 2 ou 3 colocataires, avec un revenu précis, et un loyer fixe, comment puis-je formaliser ce cas.
Je suis parti sur la fonction coloc(int R[ ], int L), et dans la main(), j'appelle coloc(&R[2],L) et l'erreur suivante s'affiche :
expected declaration or statement at end of input

A quoi correspond ton "?
0
firk > firk
 
que signifie le "?
0
firk
 
J'avais pensé à faire avec strcmp; je pense qu'avec une boucle for(i=0;i<6;i++), ça devrait passer. Pas besoin de passer par switch.

Si j'extrapole la situation à 2 ou 3 colocataires, avec un revenu précis, et un loyer fixe, comment puis-je formaliser ce cas.
Je suis parti sur la fonction coloc(int R[ ], int L), et dans la main(), j'appelle coloc(&R[2],L) et l'erreur suivante s'affiche :
expected declaration or statement at end of input

A quoi correspond ton "?
0
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
C'est pas tu n'as pas besoin de passer par switch, mais plutôt que ça ne peut pas marcher avec switch.

Je comprends pas vraiment ce que tu veux faire avec ta fonction coloc ?

Le guillemet permet de délimiter une chaine de caractère.

PS : Attention, j'ai fait une erreur avec &quot dans mon premier post.
0
firk
 
disons que je veux étudier le cas à deux colocataires, soit ayant tous les deux les mêmes statuts, soit avec des statuts différents, et voir en fonction du montant du loyer, s'ils peuvent répondre à mes attentes.

Pour cela, je dois énumérer beaucoup de cas. Je pourrais t'envoyer ce soir le tableau qui récapitule les situations selon les statuts.(il y a en effet beaucoup de combinaisons à établir, je n'ai fait que les cas les plus simples).
0
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Oui mais tu attends qu'elle fasse quoi ta fonction coloc ?
Ecris le code en C, ou les étapes en français que je vois mieux tes attentes.
0
firk
 
Je n'ai pas encore tout rectifié, mais je te montre une partie du code ;

colocation(int R[],int L)
{ int i,h,k;
for(i=0;i<2;i++)
scanf("%d",&R[i]);

switch(status){

{ case(status[1]==status[2]=*status[5]):/* Cas 2 En place(les 2 premiers case) */
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");break;
}

case(status[1]=*status[5] && status[2]!=status[1]):/* Cas 1 En place avec n'importe qui */
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");break;


cas un peu plus complexes :


//Etudiant avec quelqu'un ayant un autre statut

case(status[1]=*status[2] && status[2]!=*status[2] || status[2]=*status[2] && status[1]!=*status[2]):
{ (R[2]>3*L || R[1]>3*L)? 1 : 2 || 3;
(R[2]<2*L || R[1]<2*L)? 3 : exit(1);
}
break;



case(status[1]=*status[k] && status[2]!=status[1] && status[2]!=*status[5]):/* Cas 1 C.D.I avec n'importe qui*/
{
while( R[1]<2*L && R[2]<=3*L)
{ (k=0)? 3 : 2;
(k=3)? 3 : 2;
(k=4)? 3 : 2;
break;
}
while( R[1]>3*L && (R[2]<=3*L || R[2]>=2*L || R[2]<2*L) )
{ (k=0)? 1 : 2;
(k=3)? 1 : 2;
(k=4)? 1 : 2;
break;
}

}

}
0
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
A quoi correspond L et R ?
0
firk
 
L comme loyer, R comme revenu du locataire i.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Ok, je pense avoir compris.

Je pense que ça serait mieux de pas utiliser char [][50] pour le statut mais plutôt :

#define NB_COLLOC 5
#define CDI_Hors_Essais 1
#define ETUDIANT 2
#define TNS 3
etc
int status[]={CDI_HORS_ESSAIS,ETUDIANT,TNS};

Le remplissage de R serait mieux dans une autre fonction comme une fonction d'admin :
  int R[NB_COLLOC];
  int i;
  for(i=0;i<NB_COLLOC;i++){
     printf("Collocataire %d",i);
     scanf("%d",R+i);
  }

void colloc(int *R, int L){
    int i;
    for(i=0;NB_COLLOC;i++){
        /*Ici tu mets tes conditions pour tes colloc */
    }

}
0
firk
 
d'accord, sauf que nb_coloc vaut au maximum 2, et qu'il y a 6 statuts différents!!
0
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847 > firk
 
Ah ? Donc j'ai pas bien compris ce que tu voulais. Je croyais que status[i] te retourne le statut du ième colocataire.
Dans ce cas pourquoi tu fais : if(status[1]==status[2]) etc, puisque les status tu les connais au début ? oO
0
firk > fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention  
 
Non, t'as bon, mais nb_coloc si j'ai bien compris correspond au nombre de colocataires.
Et puis avec tes préprocesseurs define, je rencontre encore le problème de missing whitespace after the macro name. Réponds vite, stp.
0