C/Visual C - duda sobre sintaxis de switch

 
Vista:

duda sobre sintaxis de switch

Publicado por gothmog (12 intervenciones) el 05/02/2003 19:40:16
wenas, tengo una duda sintactica sobre el switch. Yo kiero hacer un switch para determinar en que tipo de mes me encuentro (28, 30 o 31 dias). Por tanto, pongo:

switch(mes){
case 1,3,5,7,8,10,12:
// hacer cosas
break;
case 4,6,9,11:
// hacer cosas
break;
case 2:
//hace cosas
break;
}

No se si esto esta bien. Buscando en un libro que tengo (es bastante antiguo, de turbo c++ 3.1) no he visto ninguna referencia a esto ni como error ni como algo correcto.

Al compilar no me da error, pero al hacer el switch, no entra en ninguna rama. Cual es el problema?

De momento lo solvento poniendo las 12 ramas distintas, pero la verdad es que es un incordio, y hay mucho codigo repetido.

No hay forma de mejorarlo?

P.D.: Uso CBuilder 5
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:duda sobre sintaxis de switch

Publicado por Arisee (37 intervenciones) el 06/02/2003 00:03:12
Hola,
En principio parece estar bien. Supongo ke ya lo habras tenido en cuenta pero la variable mes supongo ke sera un integer. Si no es asi, acuerdate de poner las comillas en los valores de los case.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:duda sobre sintaxis de switch

Publicado por gothmog (12 intervenciones) el 06/02/2003 00:28:49
Si, mes es un integer, asi q de comillas nada. Por lo que veo, y ya que no da error al compilar, supongo que en teoria si que se puede, pero no se pq fallara. :(
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:duda sobre sintaxis de switch

Publicado por chuidiang (677 intervenciones) el 06/02/2003 10:08:51
La sintaxis no es correcta. La forma buena de hacerlo es

case 1:
case 3:
case 5:
// hace cosaas
break;
case 4:
case 5:
// hace coas
break;

Mi compilador si da error al compilar lo que has puesto y dice q
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:duda sobre sintaxis de switch

Publicado por chuidiang (677 intervenciones) el 06/02/2003 10:13:14
Perdon, se me escapó.

Decía que mi compilador sí da error con tu ejemplo y es que no espera las comas.

¿Por que a ti no te da error?. No lo se seguro, pero prueba lo siguiente. En C se pueden definir etiquetas para hacer goto, aunque sea feo. La etiqueta se define como una linea en la que pones el nombre de la etiqueta seguida de dos puntos.

etiqueta:
// codigo por aqui
goto etiqueta;

Quizas esté interpretando tus case como etiquetas, no se me ocurre otra cosa. En cierta ocasión me pasó algo parecido, compilaba bien, pero luego no funcionaba.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:duda sobre sintaxis de switch

Publicado por gothmog (1 intervención) el 06/02/2003 18:24:29
pues no, no me lo trata como etiqueta, he probado a poner el goto y me dice que no encuentra ninguna etiqueta. Ademas, he visto que si pongo:

case 1, 3:
//...
case 3:
//...

Me da error de case duplicado.

De todos modos, al decirme que sintacticamente es incorrecto, pues nada. Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:duda sobre sintaxis de switch

Publicado por Googol (255 intervenciones) el 09/02/2003 00:15:00
Tal vez sea porque usa el operador coma.
En C es posible poner:

a = 1, 3;

que asignará. creo, a la variable "a" el primer valor.
También pueden hacerse cosas como:
a = 1, b = 3; // Separamos las dos sentencias con el operador ,
Esto es posible, porque realmente el "operador" = devuelve lo de la parte derecha... bueno, un poco liosillo, pero el caso es que cuela :-)
La utilidad del operador , es bastante poca, creo, y más bien suele confundir que ayudar. Creo que su único uso coherente es en los for, para poder tener varias inicializaciones o incrementos:

for (a = 1, b = 3; a < 4 && b <=7; a++, b+= 2)
[...]

Bueno, es sólo un ejemplo... no tiene mucho sentido :-)
La inicialización contiene dos partes, la de la variable a y la de la b. Lo mismo ocurre con la parte del incremento. Para lograrlo, se separan ambas partes con el operador coma.

Bueno, pues el caso es que igual lo que está pasando es que se usa el operador coma en la parte de las constantes... aunque parece que más bien parece que está actuando a la inversa. En el compilador que yo he probado (C++ Builder 5.0) también compila. Sin embargo parece que tiene validez la última constante, en lugar de la primera como con en a = 1,3. Es decir:

case 1,2:

es lo mismo que

case 2:

En lugar de lo mismo que "case 1:" (como debería ocurrir con el operador coma, en el que el "resultado" es el primer valor...)

Esto se demuestra porque aunque:

case 1,3:
...
case 3:
...

da error por caso duplicado c
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar