OVH Cloud OVH Cloud

return dans un switch case

90 réponses
Avatar
Albert
Bonjour a tous,
Mon probleme est dans le titre.
J'ai un switch case et a l'interieur est il "permis" de sortir d'un
case par un return ( le switch case est bien sur dans une fonction)
A la compile ( gcc (GCC) 3.2.2 20030222 (Red Hat Linux 3.2.2-5))
je n'ai aucun message d'avertissement. Mais je voudrais etre sur que
c'est correcte. Rien vu a ce sujet.
Merci de vos reponses.
gil

10 réponses

5 6 7 8 9
Avatar
Harpo
Antoine Leca wrote:


J'ai vu, en _France_, des documents (écrits en russe, OK) du XXe
siècle avec les dates en calendrier julien. Qui croire ?


Sur le coup de l'emprunt russe, vous vous êtes aussi fait avoir sur les
dates de valeur ?

Avatar
Emmanuel Delahaye
Oui, et vous seriez ainsi revenu sur le thème, le sujet même de
l'exemple du PO étant de ne point nous laisser le choix dans la date.


Pas mal...

--
A+

Emmanuel Delahaye

Avatar
TERENCE
"Emmanuel Delahaye" a écrit dans le message de news:4390839a$0$12536$
retour = qqchose;
break; /* un goto qui fait sa chochote */


Oui, de même que 'switch' est une succession de 'if ... goto ...', relooké.


Un if else aussi... La question n'est pas là.


Je confirme que la question n'est pas là, évidement, puisqu'il n'y a pas de question.


T'as lu le fil ?


Ben oui ! c'te question ! Et ce fil part dans tous les sens, entre moule, substance, golf, marathon ...





Avatar
Charlie Gordon
"Emmanuel Delahaye" wrote in message
news:439160a6$0$10013$
Oui, et vous seriez ainsi revenu sur le thème, le sujet même de
l'exemple du PO étant de ne point nous laisser le choix dans la date.


Pas mal...


D'ailleurs il est évident que l'informaticienne qui a le choix dans la date,
compile le C.

--
Chqrlie.


Avatar
Charlie Gordon
"Albert" wrote in message
news:43907f3c$0$19691$
Bonjour a tous,
Mon probleme est dans le titre.
J'ai un switch case et a l'interieur est il "permis" de sortir d'un
case par un return ( le switch case est bien sur dans une fonction)
A la compile ( gcc (GCC) 3.2.2 20030222 (Red Hat Linux 3.2.2-5))
je n'ai aucun message d'avertissement. Mais je voudrais etre sur que
c'est correcte. Rien vu a ce sujet.
Merci de vos reponses.
gil




Bonsoir a tous,
je tiens a vous remercier pour vos reponses, bien que 95% ne
correspondaient pas a la question primaire : "returun dans un switch
case" et certainement pas a l'algo ( qui fonctionne tres bien).

Donc je me retire de la liste en vous souhaitant une discussion tres
ciblee qui vous fera plaisir et une excellente fin de semaine.


Note quand meme qu'il manque un paquet de break dans ton switch.

--
Chqrlie.


Avatar
Pierre Maurette
"Emmanuel Delahaye" wrote in message
news:439160a6$0$10013$
Oui, et vous seriez ainsi revenu sur le thème, le sujet même de
l'exemple du PO étant de ne point nous laisser le choix dans la date.


Pas mal...


D'ailleurs il est évident que l'informaticienne qui a le choix dans la date,
compile le C.
C'est velu, votre humour ...

;-)

--
Pierre Maurette



Avatar
Pierre Maurette
"Albert" wrote in message
news:43907f3c$0$19691$
Bonjour a tous,
Mon probleme est dans le titre.
J'ai un switch case et a l'interieur est il "permis" de sortir d'un
case par un return ( le switch case est bien sur dans une fonction)
A la compile ( gcc (GCC) 3.2.2 20030222 (Red Hat Linux 3.2.2-5))
je n'ai aucun message d'avertissement. Mais je voudrais etre sur que
c'est correcte. Rien vu a ce sujet.
Merci de vos reponses.
gil




Bonsoir a tous,
je tiens a vous remercier pour vos reponses, bien que 95% ne
correspondaient pas a la question primaire : "returun dans un switch
case" et certainement pas a l'algo ( qui fonctionne tres bien).

Donc je me retire de la liste en vous souhaitant une discussion tres
ciblee qui vous fera plaisir et une excellente fin de semaine.


Note quand meme qu'il manque un paquet de break dans ton switch.
Euh. Le break après le return, c'est pas un peu gâcher ?


--
Pierre Maurette



Avatar
Charlie Gordon
"Pierre Maurette" wrote in message
news:
"Emmanuel Delahaye" wrote in message
news:439160a6$0$10013$
Oui, et vous seriez ainsi revenu sur le thème, le sujet même de
l'exemple du PO étant de ne point nous laisser le choix dans la date.


Pas mal...


D'ailleurs il est évident que l'informaticienne qui a le choix dans la date,
compile le C.
C'est velu, votre humour ...



oui, mais elle, ça la rase ;-)




Avatar
Charlie Gordon
"Pierre Maurette" wrote in message
news:
...
Note quand meme qu'il manque un paquet de break dans ton switch.
Euh. Le break après le return, c'est pas un peu gâcher ?



Je reprends le code de l'OP ci-dessous:

int test_saisie( int day, int month, int year )
{
/* cas special de l'annee et mois du changement : on retourne Faux (
+ tard) */
if (year == Gregoire && month == 9 && day > 2)
{
printf("nAttention annee, mois et jour >2 du passage Julien ->
Gregorien !n");
printf("---------> On verra plus tard <--------------nn");
return(Faux);
}

/* c'est un 29 non fevrier donc saisie plausible = Vrai */
if ((day == 29 ) && ( month != 2))
return(Vrai);

switch (day)
{
case 29:
if (( year%4 == 0 && year%100 != 0) || (year%4 ==0 && (year%100
== 0 && year%400 == 0)))
{
printf("nL'annee %d est bien Bissextille !!nn",year);


===== bissextile sans majuscule et avec un seul l
de plus il faudrait tester si le siecle est postérieur à la réforme Grégorienne
contrairement à ce que fait ce code, 1500 était bien bissextile par exemple.

return(Vrai);
}
else
{
printf("nAnnee non bissextille !!nn");
return(Faux);
}

case 30:
if ( day == 30 && month == 2)


===== le test sur day est redondant.

{
printf("n Le mois de %s n'a pas 30 jours !!!nn",t_mois[month-1]);
return(Faux);
}



===== ICI il manque un break; la fonction va refuser les 30 avril, juin,
septembre et novembre :-(

case 31:
if ((month == 2) || (month == 4) || (month == 6) || (month == 9)
|| (month =))
{
printf("nLe mois de %s n'a pas 31 jours !!!nn",t_mois[month-1]);
return(Faux);
}


====== ICI aussi, mais pour éviter un bug si ce switch venait à être étendu avec
d'autres case ou un default par la suite.

}
/* les autres cas sont ok */
return(Vrai);
}


On ne teste pas les bornes pour day et month : il faudrait refuser (day < 1 ||
day > 31) et (month < 1 || month > 12).

--
Chqrlie.


Avatar
Albert
"Pierre Maurette" wrote in message
news:


....

Note quand meme qu'il manque un paquet de break dans ton switch.


Euh. Le break après le return, c'est pas un peu gâcher ?



Je reprends le code de l'OP ci-dessous:


int test_saisie( int day, int month, int year )
{
/* cas special de l'annee et mois du changement : on retourne Faux (
+ tard) */
if (year == Gregoire && month == 9 && day > 2)
{
printf("nAttention annee, mois et jour >2 du passage Julien ->
Gregorien !n");
printf("---------> On verra plus tard <--------------nn");
return(Faux);
}

/* c'est un 29 non fevrier donc saisie plausible = Vrai */
if ((day == 29 ) && ( month != 2))
return(Vrai);

switch (day)
{
case 29:
if (( year%4 == 0 && year%100 != 0) || (year%4 ==0 && (year%100
== 0 && year%400 == 0)))
{
printf("nL'annee %d est bien Bissextille !!nn",year);



===== bissextile sans majuscule et avec un seul l


Je garde la majuscule et enveleve un l !!
de plus il faudrait tester si le siecle est postérieur à la réforme Grégorienne
contrairement à ce que fait ce code, 1500 était bien bissextile par exemple.
Fait ailleurs





return(Vrai);
}
else
{
printf("nAnnee non bissextille !!nn");
return(Faux);
}

case 30:
if ( day == 30 && month == 2)



===== le test sur day est redondant.

Corrige ...


{
printf("n Le mois de %s n'a pas 30 jours !!!nn",t_mois[month-1]);
return(Faux);
}




===== ICI il manque un break; la fonction va refuser les 30 avril, juin,
septembre et novembre :-(


case 31:
if ((month == 2) || (month == 4) || (month == 6) || (month == 9)
|| (month =))
{
printf("nLe mois de %s n'a pas 31 jours !!!nn",t_mois[month-1]);
return(Faux);
}



====== ICI aussi, mais pour éviter un bug si ce switch venait à être étendu avec
d'autres case ou un default par la suite.


}
/* les autres cas sont ok */
return(Vrai);
}



On ne teste pas les bornes pour day et month : il faudrait refuser (day < 1 ||
day > 31) et (month < 1 || month > 12).

Fait ailleur

gil



5 6 7 8 9