Definire un nuovo tipo di dato capace di rappresentare i dipendenti di una ditta: di tali dipendenti interessa il cognome, il numero degli anni di anzianità maturati e lo stipendio. Si supponga che la dimensione massima del cognome sia di 40 caratteri.
Assumere che i dati dei dipendenti della ditta siano memorizzati in un array di dimensione NUM_DIPENDENTI. Scrivere un programma in linguaggio C che realizzi le seguenti funzioni:
- int anzianita( struct dipendente dip [], char * cognome ); che, dato il cognome di un dipendente, restituisce il numero di anni di anzianità maturati;
- char * piuPagato( struct dipendente dip []); che restituisce il cognome del dipendente con stipendio massimo;
- dipendente* ottieniDipendente(struct dipendente dip [], char * cognome); che preso in input il cognome di un dipendente restituisce il puntatore al rispettivo record.
main.c
#include "definizioni.h"
int main()
{
struct dipendente dipendenti[N_DIP]; // creazione array di tipo dipendente
//char *cognome_da_trovare;
//gets(cognome_da_trovare);
//Inserimento dati all'interno della struttura
strcpy(dipendenti[0].cognome, "rossi");
dipendenti[0].anni = 3;
dipendenti[0].stipendio = 1200;
strcpy(dipendenti[1].cognome, "bianchi");
dipendenti[1].anni = 6;
dipendenti[1].stipendio = 1500;
printf("%d\n", anzianita(dipendenti, "rossi"));
printf("%d\n", piuPagato(dipendenti));
struct dipendente *attuale = ottieniDipendente(dipendenti, "bianchi");
}
definizioni.h
#include <stdio.h>
#include <string.h>
#define N_DIP 1
#ifndef DIP_H
#define DIP_H
struct dipendente
{
char cognome[40];
int anni;
int stipendio;
};
int anzianita( struct dipendente dip [], char * cognome );
char * piuPagato( struct dipendente dip []);
dipendente* ottieniDipendente(struct dipendente dip [], char * cognome);
#endif
funzioni.c
#include "definizioni.h"
int anzianita( struct dipendente dip[], char *cognome)
{
int i = 0; //indice di scorrimento all'interno dell'array
int res = -1;
while(res < 0 && i < N_DIP)
{
if(strcmp(dip[i].cognome, cognome) == 0)
res = dip[i].anni;
i++;
}
return res;
}
char *piuPagato(struct dipendente dip [])
{
int i;
int massimo = 0;
for(i = 1; i < N_DIP; i++)
{
if(dip[i].stipendio > dip[massimo].stipendio)
massimo = i;
}
return dip[massimo].cognome;
}
dipendente* ottieniDipendente(struct dipendente dip [], char * cognome)
{
int i = 0; //indice di scorrimento
while(i < N_DIP)
{
if(strcmp(dip[i].cognome, cognome) == 0)
return dip[i];
}
}
In compilazione mi da i seguenti
errori:
In file included from main.c:1:0:
definizioni.h:19:1: error: unknown type name ‘dipendente’
dipendente* ottieniDipendente(struct dipendente dip [], char * cognome);
^
main.c: In function ‘main’:
main.c:19:2: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘char *’ [-Wformat=]
printf("%d\n", piuPagato(dipendenti));
^
main.c:20:31: warning: initialization from incompatible pointer type [enabled by default]
struct dipendente *attuale = ottieniDipendente(dipendenti, "bianchi");
^
In file included from funzioni.c:1:0:
definizioni.h:19:1: error: unknown type name ‘dipendente’
dipendente* ottieniDipendente(struct dipendente dip [], char * cognome);
^
funzioni.c: In function ‘piuPagato’:
funzioni.c:26:13: error: ‘minimo’ undeclared (first use in this function)
return dip[minimo].cognome;
^
funzioni.c:26:13: note: each undeclared identifier is reported only once for each function it appears in
funzioni.c: At top level:
funzioni.c:29:1: error: unknown type name ‘dipendente’
dipendente* ottieniDipendente(struct dipendente dip [], char * cognome)
^
funzioni.c: In function ‘ottieniDipendente’:
funzioni.c:35:4: error: incompatible types when returning type ‘struct dipendente’ but ‘int *’ was expected
return dip
;
^
make: *** [exe] Errore 1
Perché?