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