Programación General > C/C++

 Duda con codigo C

(1/2) > >>

cltomas:
Tengo que hacer el siguiente programa:

--- Código: C ---/*Dados como entrada 3 enteros representando la fecha como dia ? mes, año, imprimir la fecha del dia anterior. Por ejemplo para una entrada como: 1 3 1992 La salida seria: Fecha anterior a 1-3-1992 es 29-02-1992 */                                                        Este es mi codigo:

--- Código: C ---#include <stdio.h> /*Dados como entrada 3 enteros representando la fecha como dia ? mes, año, imprimir la fecha del dia anterior. Por ejemplo para una entrada como: 1 3 1992 La salida seria: Fecha anterior a 1-3-1992 es 29-02-1992 */                                                                                              int main(){     int dia;     int mes;     int anno;    int dia2, mes2;    int fecha;    int anno2;       printf("nIntroduce el Día del mes=>n");    scanf("%d", &dia);    getchar();    printf("nIntroduce el mes [numerario]=>n");    scanf("%d", &mes);    getchar();    printf("nIntroduce el año =>n");    scanf("%d", &anno);    getchar();         dia2=dia-1;      mes2=mes-1;     anno2=anno-1;        /* como restringir la entrada del dia y mes a 2 digitos y año a 4 digitos*/         if((dia2 == 0) && (mes2 == 0) && (anno != 0)) //caundo la fecha introducida sea del tipo 1-1-1977 sera 30-12-1976            {          dia2 = 31;         mes2 = 12;                 printf("n[1º] La fecha anterior a %d-%d-%d es %d-%d-%dn", dia, mes, anno, dia2, mes2, anno2);      }    else         if ((dia2 > 0) && (mes2 == 0) && (anno != 0))// cuando la fecha introducida sea del tipo 12-1-1977 sera 11-1-1977          {           dia2=dia - 1;           mes2=mes2 + 1;                     printf("n[2º]La fecha anterior a %d-%d-%d es %d-%d-%dn", dia, mes, anno, dia2, mes2, anno);        }     else          if ((dia2 == 0) && (mes2 > 0) && (anno != 0))// cuando la fecha introducida sea del tipo 1-12-1977 sera 30-11-1977       {           dia2= 30;           mes2=mes -1;                     printf("n[3º]La fecha anterior a %d-%d-%d es %d-%d-%dn", dia, mes, anno, dia2, mes2, anno);       }     else         if ((dia2 > 0) && (mes2>0) && (anno != 0))//cuando la fecha introducida sea del tipo 16-4-1977 sera 15-4-1977       {          dia2=dia -1;          mes2=mes2 + 1;                   printf("n[4º]La fecha anterior a %d-%d-%d es %d-%d-%dn", dia, mes, anno, dia2, mes2, anno);                  }       else             if ((dia == 0) || (mes == 0) || (anno == 0))      {               printf("n[5] ERROR ..Has introducido un 0.. n");      }     else      {           printf("nERROR!!!! (día, mes, año negativo?)n");//para numero negativos LoL!!!!       }     getchar();    return 0;}  Sé que me ido por las ramas con el codigo, pero soy novato y autodidacta, mis dudas son:
1.-¿ como hago para cuando el mes del año tenga 31 días y no 30?.
2.-¿como restringir la entrada del dia y mes a 2 digitos y año a 4 digitos?

Desde ya gracias y Saludos  :hola:

perrete:
Para los días de cada mes, sólo se me ocurre que los vayas comprobando uno a uno, porque además tienes el problema de febrero que tiene 28...

Para restringir la entrada del mes, puedes utilizar un bucle while, que se repita hasta que el número introducido sea menor que 13. Es una forma muy básica de control de errores, pero en este caso funcionaría.

Y para el año igual, si son cuatro dígitos enciérralo en otro while donde se controle que el número introducido sea mayor que 1000 y menor que 9999.

Espero haberte sido de ayuda, un saludo!

cltomas:
Gracias, el problema es que se debe realizar sin while ya que aún no llego a los bucles while, for .... :brickwall:

cltomas:
Gracias, el problema es que se debe realizar sin while ya que aún no llego a los bucles while, for .... :brickwall:


doble post lo siento..no se borrarlo

perrete:
Pues entonces con un if, cuando se introduzca el numero del mes compruebas que sea menor que 13 y mayor que 0, y el año compruebas que sea mayor que 1000 y menor que 9999. Un saludo!

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa