Programme en C
firk
-
zavenger Messages postés 817 Statut Membre -
zavenger Messages postés 817 Statut Membre -
Bonjour,
J'aimerais trouver d'où vient l'erreur dans mon programme; j'ai essayé toutes les possibilités qui me semblent plausibles, mais je ne parviens pas à la corriger.(elle y est plusieurs fois dans mon programme, mais c'est la même à chaque fois, via le message d'erreur invalid lvalue in assignment)
Par exemple :
char* (status[6])={"CDI_hors_ess_ou_preavis_lic,CDD_CNE_ou_CDI_essai,Etudiant,TNS,Retraités,Douze_mois_sans_incident_paiement"};
colocation(int R[],int L,char statut1,char statut2)
{ int i,h,k;
switch(statut1,statut2){
{ case(statut1=statut2 && statut2=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(statut1=status[5] && statut2=!status[1]): /* Cas 1 En place avec n'importe qui */
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");break;
}
J'aimerais trouver d'où vient l'erreur dans mon programme; j'ai essayé toutes les possibilités qui me semblent plausibles, mais je ne parviens pas à la corriger.(elle y est plusieurs fois dans mon programme, mais c'est la même à chaque fois, via le message d'erreur invalid lvalue in assignment)
Par exemple :
char* (status[6])={"CDI_hors_ess_ou_preavis_lic,CDD_CNE_ou_CDI_essai,Etudiant,TNS,Retraités,Douze_mois_sans_incident_paiement"};
colocation(int R[],int L,char statut1,char statut2)
{ int i,h,k;
switch(statut1,statut2){
{ case(statut1=statut2 && statut2=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(statut1=status[5] && statut2=!status[1]): /* Cas 1 En place avec n'importe qui */
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");break;
}
Configuration: Linux Mandriva Firefox 2.0.0.13
11 réponses
-
Euh, en effet, vous ne devez pas avoir beaucoup appris le C, mais un autre programme… parce qu’il y a beaucoup, beaucoup d’erreurs, je vais les détailler !
-
//char* (status[6])={"CDI_hors_ess_ou_preavis_lic,CDD_CNE_ou_CDI_essai,Etudiant,TNS,Retraités//,Douze_mois_sans_incident_paiement"};
char * status [6] = {"CDI_hors_ess_ou_preavis_lic" , "CDD_CNE_ou_CDI_essai" , "Etudiant,TNS" , "Retraités", "Douze_mois_sans_incident_paiement" } ;
//colocation(int R[],int L,char statut1,char statut2)
//{ int i,h,k;
//Là, j’ai vraiment rien compris
//switch(statut1,statut2){
//
//{ case(statut1=statut2 && statut2=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(statut1=status[5] && statut2=!status[1]): /* Cas 1 En place avec n'importe qui */
//printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");break;
//}
Ici, vous comparez des chaines de caractères, il faut que vous utilisiez strcmp.-
le premier case correspond au cas où les 2 personnes ont le même status, à savoir 12 mois...
Je ne voudrais pas énumérer tous les if, c'est pourquoi j'ai introduis le switch suivi de case.
si j'utilise strcmp, je dois faire tous les if.
Est-ce que je peux utiliser strcmp dans les cases?
P.S : c'est bien strcmp(statut1==statut2; statut2=status[5]) pour le premier case ?
-
-
je vois pas l'interet de ton switch la
fais plutot
if(statut1==statut2 && statut2==status[5])
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");
else if(statut1==status[5] && statut2=!status[1])
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");
et comme ton tableau status[] contien des char* il faut que statu1 et statu2 soit aussi des char*
et a ce moment tu doit les comparé non pas avec un (==) mais avec un STRCMP -
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
tu ne déranges pas si tu as d'autre solution a apporter soit le bienvenu =)
-
non c'est
strcmp(statut1,statut2) && strcmp(statut2=status[5])
et je ne sais pas si tu a le droit de switch sur 2 variables-
j'ai essayé comme tu m'as proposé mais j'ai les erreurs lorsque j'insère ceci, kazouu :
case(strcmp(statut1,statut2) && strcmp(statut2=status[5]) ):
warning: passing argument 1 of ‘strcmp’ makes pointer from integer without a cast
warning: passing argument 2 of ‘strcmp’ makes pointer from integer without a cast
warning: assignment makes integer from pointer without a cast
warning: passing argument 1 of ‘strcmp’ makes pointer from integer without a cast
error: too few arguments to function ‘strcmp’- si je corrige ton ton code a vu d'oeil ca donne un truc du genre
(status[6])={"CDI_hors_ess_ou_preavis_lic,CDD_CNE_ou_CDI_essai,Etudiant,TNS,Retraités,Douze_mois_sans_incident_paiement"};
colocation(int R[],int L,char* statut1,char* statut2)
{ int i,h,k;
switch(statut1,statut2){
{ case(strcmp(statut1,statut2) && strcmp(statut2,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(strcmp(statut1,status[5]) && !strcmp(statut2,status[1])): /* Cas 1 En place avec n'importe qui */
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");break;
} - firk, si statut1 et statut2 sont des entiers alors ça ne sert à rien de les comparer avec une chaîne de caractères, ni entre eux avec strcmp.
D’autre part tu n’as pas compris à quoi sert switch, il faut ABSOLUMENT que tu utilises if pour faire ce que tu veux.
if ((statut1 == statut2) && (statut2 == 5))
-
-
Bonjour, la structure de switch, c’est
switch(EXPRESSION) {
case VALEUR :
[…] break;
etc.
}
statut1, statut2 est effectivement une expression, mais qui ne sert à rien, puisque l’opérateur virgule, en C, renvoie la deuxième valeur ;
et ici, au lieu de faire des comparaisons avec ==, tu fais des affectations avec =, qui te renvoient automatiquement la valeur de droite… bref. -
ouai et je ne vois pas la difference entre faire
switch
case
case
...
ou
if
else if
else if
..
mais bon a toi de voir-
-
-
-
Si je fais qqch du style :
switch(statut1==statut2){
case(0):statut2=status[5]; /* Cas 1 En place avec n'importe qui */
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");break;
default( );statut2==status[5]: /* Cas 2 En place(les 2 premiers case) */
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");break;
} -
mais c'est affreux ^^
arrête de vouloir faire un a tout prix un switch
un switch a la base c'est pour tester les different resultat d'une expression
donc si tu veux vraiment faire un switch faut que tu fasse
switch(statut1==statut2){
case(0): if(statut2=status[5]) /* Cas 1 En place avec n'importe qui */
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");break;
mais c'est vraiment très très laid
-
-
moi je te conseil
(status[6])={"CDI_hors_ess_ou_preavis_lic,CDD_CNE_ou_CDI_essai,Etudiant,TNS,Retraités,Douze_mois_sans_incident_paiement"};
colocation(int R[],int L,char* statut1,char* statut2)
{ int i,h,k;
if(strcmp(statut1,statut2) && strcmp(statut2,status[5]))
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n")
else if(strcmp(statut1,status[5]) && !strcmp(statut2,status[1]))
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");
} -
Bonjour,
Je peux me tromper bien sur, mais je me demande si tu ne prends pas le probleme a l'envers. Ne serait il pas possible de calculer pour chaque cas final les conditions d'acceptation. Je n'ai bien sur pas les details, mais faire qque chose comme:
AssuranceOK = condition1 ET condition2 ou conditin3
....
ensuite
faire le traitement de tous tes resultats
Juste une idee comme cela ... -
oui après ca c'est l'algo nous on l'aide juste pour le codage ^^
-
mais c'est peut-etre justement l'algo qui fait que le codage est difficile. C'est pour cela que je demande si l'algo ne pourrait pas etre revu, car il a l'air d'avoir un algo du style
si condiftion1 alors resultat1
si condiftion2 alors resultat2
si condiftion3 alors resultat1
...
Alors qu'il faudrait peut etre avoir un algo
on a resultat1 si condition1 et condition3
on a resultat2 si condition2
...- oui,
pour 2 locataires :
si les 2 sont etudiant, alors pour tout revenu, on a "caution solidaire".
si etudiant+CDD : si revenu (CDD)>=2*L, alors "caution solidaire".
si revenu (CDD)<2*L, alors "impossible.
il y a des situations où un statut domine tous les autres, 2 statuts qui sont dominés, etc...
et ainsi de suite. le noeud de l'algorithme réside dans le fait de bien combiner le statut des 2 locataires.
(je dois aussi faire pour 3 locataires, c'est plus complexe encore).
-