/* File: datasucc-switch.c */
/* Legge giorno, mese ed anno di una data e determina la data del giorno
   successivo. Per evitare complicazioni nel calcolo degli anni bisestili, si
   assume che l'anno sia compreso tra 1801-2099. Variante che fa uso di
   switch. */

#include <stdio.h>

int main(void)
{
  int giorno, mese, anno, giorni_del_mese;

  /* lettura della data */
  printf("Data (giorno, mese, anno) ? ");
  scanf("%d%d%d", &giorno, &mese, &anno);
  printf("Giorno successivo al %d/%d/%d e` ", giorno, mese, anno);

  /* calcola il numero dei giorni del mese */
  switch (mese) {

  case 1: case 3: case 5: case 7: case 8: case 10: case 12:
    giorni_del_mese = 31;
    break;

  case 4: case 6: case 9: case 11:
    giorni_del_mese = 30;
    break;

  case 2:
    if ((anno % 4) == 0 && anno != 1900)
      giorni_del_mese = 29;
    else
      giorni_del_mese = 28;
    break;
  }

  /* aggiorna la data del mese successivo */
  if (giorno == giorni_del_mese) {
    giorno = 1;
    if (mese == 12) {
      mese = 1;
      anno++;
    } else
      mese++;
  } else
    giorno++;

  /* stampa la data aggiornata */
  printf("il %d/%d/%d\n", giorno, mese, anno);
  return 0;
}
