Secondo me ti stai complicando la vita inutilmente... puoi usare le (orribili) funzioni di <time.h> per risolvere il problema:
codice:
#include <time.h>

// ...

struct tm data={0};
printf("Inserisci una data --> ");
scanf("%2d%2d%4d", &data.tm_mday, &data.tm_mon, &data.tm_year);
// Aggiusto per il formato richiesto da struct tm
data.tm_mon--; // I mesi nella struttura tm sono con base 0 e non 1
data.tm_year-=1900; // Gli anni hanno come 0 il 1900
data.tm_isdst=-1; // Indovina da solo se c'è l'ora legale
time_t timestamp=mktime(&data); // Converte la struttura con le componenti di data "spezzate" in un timestamp (di fatto è il numero di secondi passati dall'1/1/1970 alle 0.00 fino alla data di destinazione)
timestamp+=24*60*60; // Passa al giorno successivo aggiungendo un adeguato numero di secondi
data=*localtime(&timestamp); // Riconverte il timestamp così modificato in una struttura tm
printf("Il giorno seguente e' il --> %2d %2d %4d.\n\n\n", data.tm_mday, data.tm_mon+1, data.tm_year+1900);
Se invece lavori in C++ e hai a disposizione boost puoi usare la ottima Boost.DateTime, sicuramente migliore delle odiose funzioni di time.h.