una roba del genere (ovviamente da ottimizzare)
codice:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>

void gotoxy(int x, int y)
{
    COORD coor; 
    HANDLE hOutput; 
    hOutput = GetStdHandle(STD_OUTPUT_HANDLE); 
    coor.X = x; 
    coor.Y = y; 
    SetConsoleCursorPosition(hOutput,coor); 
}

int main()
{
    char c;                  // accetta input da tastiera
    char j=6;                // contatore generico (tiene traccia della colonna in cui ci troviamo)
    char g=0, m=0, a=0;      // contatori generici (g=giorno, m=mese, a=anno)
    char gg[3]="\0";         // cattura il giorno
    char mm[3]="\0";         // cattura il mese
    char aa[5]="\0";         // cattura l'anno
    char sw=1;               // muove il cursore: 1=si posiziona sul campo1, 2=...campo2, 3=...campo3
    
    // setto le dimensioni del prompt: 80colonne x 25righe
    system("mode con: cols=80 lines=25");
    
    // mi posiziono alla riga24 e scrivo...
    gotoxy(0,24);
    printf("[TAB] next  [BACKSPACE] back  [ESC] reset  [INVIO] submit");
    
    // mi posiziono alla riga0 e scrivo...
    gotoxy(0,0);
    printf("DATA: 00/00/0000");
    
    // sposto il cursore alla colonna 6
    gotoxy(6,0);
    
    // ciclo infinito
    while(1)
    {
        // accetto l'imput da tastiera (1 char alla volta)
        c=getch();     
        
        // se è stato premuto il tasto backspace
        if(c==8)                     
        {
            // se il cursore si trova sulla colonna1 (giorno) resto lì
            if(sw==1)
            { 
                gotoxy(6,0);
                printf("00");
                gotoxy(6,0);
                gg[0]='\0';
                g=0;            
            }
            // se il cursore si trova sulla colonna2 (mese) mi sposto sulla colonna1 (giorno)
            else if(sw==2)
            {
                gotoxy(6,0);
                printf("00");
                gotoxy(6,0);
                sw=1;
                j=6;
                gg[0]='\0';
                g=0;
            }
            // se il cursore si trova sulla colonna3 (anno) mi sposto sulla colonna2 (mese)
            else if(sw==3) 
            {
                gotoxy(9,0);
                printf("00");
                gotoxy(9,0);
                sw=2;
                j=9;
                mm[0]='\0';
                m=0;
            }    
        }
        // se è stato premuto il tasto tab
        else if(c==9) 
        {
            // se... cursore colonna1 (gg) mi sposto sulla colonna2 (mm) 
            if(sw==1) 
            {
                gotoxy(9,0);
                printf("00");
                gotoxy(9,0);
                sw=2;
                j=9;
                mm[0]='\0';
                m=0;
            }
            // se.. cursore colonna2 (mm) mi sposto sulla colonna3 (aa)
            else if(sw==2)
            {
                gotoxy(12,0);
                printf("0000");
                gotoxy(12,0);
                sw=3;
                j=12; 
                aa[0]='\0';
                a=0;
            }
            // se.. cursore colonna3 (aa) resto lì
            else if(sw==3)
            {
                gotoxy(12,0);
                printf("0000");
                gotoxy(12,0);
                aa[0]='\0';
                a=0;
            }
        }
        // se è stato premuto il tasto esc/escape (azzero le variabili e mi posiziono sul campo1 (gg)
        else if(c==27)
        {
            g=m=a=0;
            gg[0]='\0';
            mm[0]='\0';
            aa[0]='\0';
            gotoxy(6,0);
            printf("00/00/0000");
            gotoxy(6,0);
            sw=1;
            j=6;     
        }
        // se è stato premuto il tasto invio/return (chiudo le variabili ed esco dal ciclo while())
        else if(c==13)               
        {    
            gg[2]='\0';
            mm[2]='\0';
            aa[4]='\0';
            break;
        }    
        // altrimenti inserisco l'input (c) nelle variabili gg, mm e aa
        else                          
        {
            // se incontro il primo slash "/" lo salto e mi posiziono sul campo2 (mm)                          
            if(j==8)                 
            {
                j=9;
                gotoxy(9,0);           
            }
            // se incontro il secondo slash "/" lo salto e mi posiziono sul campo3 (aa)
            else if(j==11)           
            {
                j=12;
                gotoxy(12,0);           
            }
            
            // altrimenti sono campi validi quindi li vado a memorizzare nelle variabili
            
            // il cursore (j) si trova all'interno del campo giorno gg
            if(j>=6 && j<= 7)        
            {
                sw=1;
                gg[g]=c;
                printf("%c", gg[g]);
                j++;
                g++;
            }
            // il cursore (j) si trova all'interno del campo mese mm
            else if(j>=9 && j<= 10) 
            {
                sw=2;
                mm[m]=c;
                printf("%c", mm[m]);
                j++;
                m++;
            }             
            // il cursore (j) si trova all'interno del campo anno aa
            else if(j>=12 && j<=15) 
            {
                sw=3;
                aa[a]=c;
                printf("%c", aa[a]);
                j++;
                a++;
            }             
        }    
    }
        
    printf("\n\nDati Inseriti: %s/%s/%s\n", gg, mm, aa);
    system("pause");
    return 0;    
}
n.b. se ricevi qualche errore di compilazione (conflitto per via di gotoxy()) togli la parte di codice scritta in verde