Problema con este programa, me aparece un mensaje de error.

Iniciado por Anastacio, 21 Enero 2012, 01:45 AM

0 Miembros y 1 Visitante están viendo este tema.

Anastacio

Tengo un problema con un programa que calcula signos zodiacales.

# include <stdio.h>
# include <conio.h>

int main()

{
    int a;
    int ACUARIO;
    int ACUARIO1;
    int Piscis;
    int Piscis1;
    int Aries;
    int Aries1;
    int Tauro;
    int Tauro1;
    int Geminis;
    int Geminis1;
    int Cancer;
    int Cancer1;
    int Leo;
    int Leo1;
    int Virgo;
    int Virgo1;
    int Libra;
    int Libra1;
    int Escorpio;
    int Escorpio1;
    int Sagitario;
    int Sagitario1;
    int Capricornio;
    int Capricornio1;
    int Capricornio2;
    int Capricornio3;
   
    a = 0;
    ACUARIO = 0121;
    ACUARIO1 = 0219;
    Piscis = 0220;
    Piscis1 = 0319;
    Aries = 0320;
    Aries1 = 0420;
    Tauro = 0421;
    Tauro1 = 0521;
    Geminis = 0522;
    Geminis1 = 0622;
    Cancer = 0623;
    Cancer1 = 0722;
    Leo = 0723;
    Leo1 = 0823;
    Virgo = 0824;
    Virgo1 = 0923;
    Libra = 0924;
    Libra1 = 1023;
    Escorpio = 1024;
    Escorpio1 = 1122;
    Sagitario = 1123;
    Sagitario1 = 1221;
    Capricornio = 1222;
    Capricornio1 = 1231;
    Capricornio2 = 0101;
    Capricornio3 = 0120;
   
    printf("Con este programa usted podra saber su signo zodiacal\n");
    printf("Ahora, de su mes y dia de nacimiento, colocando primero el mes, y luego el dia, sin separarlos\n");
    printf("Ejemplo: Si usted nacio el 10 de enero, usted colocara 0110.\n");
    scanf("%d",&a);
   
    if(a >= ACUARIO and a <= ACUARIO1)
    {
     printf("Tu signo zodiacal es Acuario");
     getch();
     return 0;
     }
    if(a >= Piscis and a <= Piscis1)
    {
         printf("Tu signo zodiacal es Piscis");
         getch();
         return 0;
    }
     if(a >= Aries and a <= Aries1)
     {
          printf("Tu signo zodiacal es Aries");
          getch();
          return 0;
     }
     if(a >= Tauro and a <= Tauro1)
     
     {
          printf("Tu signo zodiacal es Tauro");
          getch();
          return 0;
         
     }
     if(a >= Geminis and a <= Geminis1)
     {
          printf("Tu signo zodiacal es Geminis");
          getch();
          return 0;
     }
     if(a >= Cancer and a <= Cancer1)
     {
          printf("Tu signo Zodiacal es Cancer");
          getch();
          return 0;
     }
     if(a >= Leo and a <= Leo1)
     {
          printf("Tu signo zodiacal es Leo");
          getch();
          return 0;
     }
     if(a >= Virgo and a <= Virgo1)
     {
          printf("Tu signo zodiacal es Virgo");
          getch();
          return 0;
     }
     if(a >= Libra and a <= Libra1)
     {
          printf("Tu signo zodiacal es Libra");
          getch();
          return 0;
     }
     if(a >= Escorpio and a <= Escorpio1)
     {
          printf("Tu signo zodiacal es Escorpio");
          getch();
          return 0;
     }
     if(a >= Sagitario and a <= Sagitario1)
     {
          printf("Tu signo zodiacal es Sagitario");
          getch();
          return 0;
     }
     if(a >= Capricornio and a <= Capricornio1)
     {
          printf("Tu signo zodiacal es Capricornio");
          getch();
          return 0;
     }
     if (a >= Capricornio2 and a <= Capricornio3)
     {
          printf("Tu signo zodiacal es Capricornio");
          getch();
          return 0;
     }
}     



Con todas las constantes que estan ahi, me da mensaje de error a las que tienen numeros con 8 y 9. Me aparece este mensaje de error: invalid digit in octal constant.

Porque???
You, stop to close my post, you were novice too!!!!!!!!!!!!

x64core

por eso, porque para representar numeros en base 8 llega hasta ahí osea que
el numero maximo es 7 es igual que en hexadecimal, es 16 pero llega hasta F

rir3760

Porque en C las constantes numéricas enteras que inician con un cero se toman como base 8 y en esta base solo son validos los dígitos 0 a 7. Para eliminar ese error basta con eliminar el cero inicial.

Aparte de eso deberías eliminar el uso de la biblioteca conio de Borland. El porque de ello es explica en el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

Por ultimo en tu programa los casos son exclusivos (no se puede ser de un signo y otro a la vez) y todas las sentencias de selección "if" terminan con:
getch();
return 0;

Eso lo debes colocar solo una vez, justo antes del final de la función principal.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

seba123neo

La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

Anastacio

Nunca se podria ser de un signo y otro a la vez. A que te refieres con eso??

Nota: No uso borland.

Ya acomode lo otro, gracias!!!!
You, stop to close my post, you were novice too!!!!!!!!!!!!

BlackZeroX

#5
Como sabras los '0' a la izquierda de un numero no influyen... quitalos... que si no estaras haciendo valores OCTALES... jamas dejes 0 a la izquierda...

en C/C++ 015 es dinto de 15 ya que 015 esta en octal y 15 en decimal...

015 octal = 13 en decimal...

Dulces Lunas!¡.
The Dark Shadow is my passion.

Anastacio

You, stop to close my post, you were novice too!!!!!!!!!!!!