Originariamente inviato da Janbure
secondo voi devo mettere anche la condizione mm<12 o è sottinteso?
che vuol dire sottinteso?se vuoi metterlo lo metti, certo è che se mese=13 il mese come stringa non lo stampa..

codice:
#include <stdio.h>
    int main ()
    {
    char*nm[]={"gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","dicembre"};
    int gg, mm, aa;
    printf("Inserire data nel formato gg/mm/aa: ");
    scanf("%d%d%d", &gg, &mm, &aa);
    
    
    if((((aa % 4 == 0 && aa % 100 != 0) || aa % 400 == 0)&&mm==2&&gg>29)||
    gg>31||
    (mm==2&&gg>28)||
    ((mm ==1||mm==4||mm==6||mm==9||mm==11)&&gg>30)){
            printf("Data non valida\n");
            getchar();getchar();
            return 0;
            }
    printf("%d/%d/%d\n", gg,mm,aa);
    printf("%d/%s/%d\n", gg,nm[mm-1],aa);
    getchar();getchar();
    return 0;
    }
prova a studiarti l'if che ho scritto riga per riga (l'ho diviso in righe per chiarezza, potrebbe stare tutto in una)nota le parentesi come sono messe, dove è possibile evitarle e studiati la priorità degli operandi