Programación General > C/C++

 invalid digit "8" in const octal

(1/2) > >>

Garethsoul:
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 objetode 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 objetoexistente. Emplear una función de utilidad normalizar() para asegurar que losmiembros 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 Aniopublic:    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.

diego.martinez:
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:
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:
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, ...

rfog:
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];

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa