Sábado 14 de Diciembre de 2024, 21:44
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
invalid digit "8" in const octal
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: invalid digit "8" in const octal (Leído 1809 veces)
Garethsoul
Nuevo Miembro
Mensajes: 13
invalid digit "8" in const octal
«
en:
Lunes 1 de Febrero de 2010, 07:00 »
0
Buenas de vuelta je tengo una pequeña duda al utilizar la funcion SWITCH tengo el siguiente codigo.
Código: C++
/*13.6 Implementar una clase Fecha con miembros dato para mes, día y año. Cada objeto
de esta clase representa una fecha, que almacena el día, mes y año como enteros.
Se debe incluir un constructor por defecto, un constructor de copia, funciones de acceso,
una función reiniciar(int d, int m, int a) para reiniciar la fecha de un objeto
existente. Emplear una función de utilidad normalizar() para asegurar que los
miembros dato están en el rango correcto 1<=año, 1<=mes<=12, 1<=día<=dias(mes)
donde dias(mes) es otra función que devuelve el número de días de cada mes.*/
#include <iostream>
using
namespace
std
;
class
Fecha
{
int
d,m,a
;
// Dia Mes Anio
public
:
Fecha
(
int
d1
=
0
,
int
m1
=
0
,
int
a1
=
0
)
:
d
(
d1
)
, m
(
m1
)
, a
(
a1
)
{
}
;
Fecha
(
const
Fecha
&
p
)
:
d
(
p.
d
)
, m
(
p.
m
)
, a
(
p.
a
)
{
}
;
//constructor copia
void
Reiniciar
(
)
{
d
=
0
;
m
=
0
;
a
=
0
;
}
;
//funcion que reincia el obj a 0
bool
Normalizar
(
)
;
// Controla que los valores de las variables sean los adecuados
void
imprimir
(
)
;
}
;
int
Dias
(
int
mes
)
;
void
Fecha
::
imprimir
(
)
{
cout
<<
d
<<
":"
<<
m
<<
":"
<<
a
<<
endl
;
}
bool
Fecha
::
Normalizar
(
)
{
if
(
1
<=
a
&&
1
<=
m
<=
12
&&
1
<=
d
<=
Dias
(
m
)
)
return
true
;
return
false
;
}
int
main
(
)
{
Fecha d1
(
10
,
08
,
2009
)
;
Fecha d2
(
d1
)
;
d1.
imprimir
(
)
;
d2.
imprimir
(
)
;
d1.
Reiniciar
(
)
;
d1.
imprimir
(
)
;
d2.
imprimir
(
)
;
cout
<<
d1.
Normalizar
(
)
<<
endl
;
cout
<<
d2.
Normalizar
(
)
<<
endl
;
system
(
"pause"
)
;
return
0
;
}
int
Dias
(
int
mes
)
{
switch
(
mes
)
{
case
01
:
return
31
;
break
;
case
02
:
return
28
;
break
;
case
03
:
return
31
;
break
;
case
04
:
return
30
;
break
;
case
05
:
return
31
;
break
;
case
06
:
return
30
;
break
;
case
07
:
return
31
;
break
;
case
08
:
return
31
;
break
;
case
09
:
return
30
;
break
;
case
10
:
return
31
;
break
;
case
11
:
return
30
;
break
;
case
12
:
return
31
;
break
;
}
}
el problema se da en el switch
Código: C++
int
Dias
(
int
mes
)
{
switch
(
mes
)
{
case
01
:
return
31
;
break
;
case
02
:
return
28
;
break
;
case
03
:
return
31
;
break
;
case
04
:
return
30
;
break
;
case
05
:
return
31
;
break
;
case
06
:
return
30
;
break
;
case
07
:
return
31
;
break
;
case
08
:
return
31
;
break
;
case
09
:
return
30
;
break
;
case
10
:
return
31
;
break
;
case
11
:
return
30
;
break
;
case
12
:
return
31
;
break
;
}
}
me dice error en el 08 y en el 09 según lo que tengo entendido es debido a que como en octal se llega hasta el 7 osea de 0 a 7 el "08 y 09" no existirían y que debería de poner en vez de ellos 010 y 011 yo quería saber si había alguna forma de colocar el 08 y 09 sin que me de error...
por lo demás todo anda joya.
gracias desde ya.
Tweet
diego.martinez
Miembro MUY activo
Mensajes: 297
Re: invalid digit "8" in const octal
«
Respuesta #1 en:
Lunes 1 de Febrero de 2010, 09:37 »
0
es simple, quita el "0" que tienes delante de los numeros.
en c, cualquier numero que empieza con 0 se considera octal. Tu solo quieres ver el valor en decimal, asi que simplemente, quita el 0 de delante, igual que si quisieras verlo en hexadecimal pondrias 0x o en binario 0b, en octal se pone solo un 0 delante.
Código: C++
case
1
:
case
2
:
...
case
8
:
case
9
:
Garethsoul
Nuevo Miembro
Mensajes: 13
Re: invalid digit "8" in const octal
«
Respuesta #2 en:
Lunes 1 de Febrero de 2010, 15:09 »
0
si, esa solución ya la tenia, lo que yo quería saber era si se podía anular eso o algo por el estilo para que quede CON el 0.
Gracias igual
rfog
Miembro MUY activo
Mensajes: 166
Re: invalid digit "8" in const octal
«
Respuesta #3 en:
Martes 2 de Febrero de 2010, 13:11 »
0
No se puede desactivar, es una característica del lenguaje.
Si quieres tener todos los números "igualicos", usa la notación hexadecimal:
0x01, 0x02, ... 0x09, 0x0a, 0x0b, 0x0c,... 0x0f, 0x10, ...
Microsoft Visual C++ MVP - Mi blog sobre programación:
http://geeks.ms/blogs/rfog
rfog
Miembro MUY activo
Mensajes: 166
Re: invalid digit "8" in const octal
«
Respuesta #4 en:
Martes 2 de Febrero de 2010, 13:14 »
0
Por cierto, ese switch se puede simplificar/mejorar con un simple if o mejor aún, con una tabla:
int diasMes[]={31,28,31...};
Y luego
int dias=diasMes[mes];
Microsoft Visual C++ MVP - Mi blog sobre programación:
http://geeks.ms/blogs/rfog
Garethsoul
Nuevo Miembro
Mensajes: 13
Re: invalid digit "8" in const octal
«
Respuesta #5 en:
Martes 2 de Febrero de 2010, 15:45 »
0
okas mucha gracias.
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
invalid digit "8" in const octal