Programme en C
firk
-
zavenger Messages postés 811 Date d'inscription Statut Membre Dernière intervention -
zavenger Messages postés 811 Date d'inscription Statut Membre Dernière intervention -
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;
}
A voir également:
- Programme en C
- Programme demarrage windows - Guide
- Mettre en veille un programme - Guide
- Message programmé iphone - Guide
- Programme word gratuit - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
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.
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 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
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
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
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’
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;
}
(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))
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.
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
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;
}
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
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");
}
(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 ...
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
...
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).
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).