Proposta di soluzione con main di inserimento dati e invocazione del metodo di analisi che esegue il controllo richiesto.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 10
struct alunno {
char nome[30];
char cognome[30];
char classe[5];
char data[10];
};
void analisi(const struct alunno lista[], const int n, const int annorif);
int main(int argc, char** argv) {
setvbuf(stdout, 0, _IONBF, 0);
struct alunno elenco[MAX];
int n=0;
printf("introdurre numero studenti < %d\n", MAX);
scanf("%d", &n);
// inserimento
int i=0;
for(i=0;i<n; i++) {
printf("introdurre nome studente %d-esimo\n", i);
scanf("%s", elenco[i].nome);
printf("introdurre cognome studente %d-esimo\n", i);
scanf("%s", elenco[i].cognome);
printf("introdurre classe studente %d-esimo\n", i);
scanf("%s", elenco[i].classe);
printf("introdurre data nascita dd.mm.yyyy studente %d-esimo\n", i);
scanf("%s", elenco[i].data);
}
// controllo su data di nascita
analisi(elenco, n, 2004);
return (EXIT_SUCCESS);
}
void analisi(const struct alunno lista[], const int n, const int annorif) {
int i;
for(i=0; i<n; i++) {
char classe[2];
// prendo la classe
strncpy(classe, lista[i].classe, 1);
classe[1] = '\0';
int iclasse = atoi(classe);
printf("classe %d-esimo : %s, %d\n", i, classe, iclasse);
char anno[5];
//prendo l'anno
strncpy(anno, lista[i].data+6, 4);
anno[5] = '\0';
int ianno = atoi(anno);
printf("anno %d-esimo : %s, %d\n", i, anno, ianno);
// controllo se bocciato
if (annorif-ianno > iclasse) {
printf("%s %s %s %s bocciato\n", lista[i].nome, lista[i].cognome,
lista[i].classe, lista[i].data);
}
}
}