Salve ragazzi, premetto che ho poca esperienza per quanto riguarda programmazione.. ho elaborato un programma di gestione di un cantiere ma mi escono degli errori.. potete spiegarmi il perchè e correggermeli? Grazie in anticipo!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE_STR 50
#define SIZE 100
typedef struct {
char cogn_I [SIZE_STR];
char nome_I [SIZE_STR];
char indirizzo_C [SIZE_STR];
int num_civ;
char citta_C [SIZE_STR];
int nop_c;
int adap_c;
int adc_c;
} cantiere;
/* Prototipi di funzione */
int insert_data (cantiere[]);
void print_cantiere (cantiere[],int);
void print_cantimpr (cantiere[],int);
int print_cantap (cantiere[]);
int print_cantmop (cantiere[]);
int main (void) {
cantiere a_cantiere [SIZE]; /* array di struttura */
int a_num=insert_data(a_cantiere);
int ch, c, m;
//Costrutto while per la scelta delle operazioni da effettuare
int choice = -1; //Variabile per l'operazione nel costrutto switch
while (choice != 0) {
printf("\n#######################\n");
printf("# MENU' #\n");
printf("#######################\n\n");
printf("\n1) Visualizza i cantieri\n");
printf("\n2) Visuaizza i cantieri affidati all'ingegnere chiesto in input dall'utente\n");
printf("\n3) Visualizza il numero dei cantieri aperti \n ");
printf("\n4) Visualizza i dati del cantiere con il maggior numero di operai\n");
printf("\n0)Esci dal programma\n");
printf("\nQuale operazione vuoi eseguire? -> ");
scanf("%d", &choice);
switch (choice)
{
case 1:
print_cantiere (a_cantiere, a_num);
break;
case 2:
print_cantimpr (a_cantiere, a_num);
break;
case 3:
c = print_cantap (a_cantiere,a_num);
break;
case 4:
m = print_cantmop (a_cantiere, a_num);
break;
case 0:
printf("\nUscita dal programma in corso...\n");
break;
default:
printf("\nLa scelta effettuata è errata\n");
break;
}
while ((ch = getchar()) != '\n' && ch != EOF)
;
printf("\n\nPremere INVIO per continuare...");
while ((ch = getchar()) != '\n' && ch != EOF)
;
}
return EXIT_SUCCESS;
}
//Funzione per l'immissione dei dati da codice
int insert_data (cantiere a_cantiere [])
{
int num_elem = 7;
strcpy (a_cantiere[0].cogn_I, "Grasso");
strcpy (a_cantiere [0].nome_I, "Graziana");
strcpy (a_cantiere [0].indirizzo_C, "Via Roma");
a_cantiere[0].num_civ= 22;
strcpy (a_cantiere[0].citta_C, "Bari");
a_cantiere[0].nop_c=7;
a_cantiere[0].adap_c =2007;
a_cantiere[0].adc_c= 2009;
strcpy (a_cantiere[1].cogn_I, "Bartucci");
strcpy (a_cantiere [1].nome_I, "Marco");
strcpy (a_cantiere [1].indirizzo_C,"Via Orabona");
a_cantiere[1].num_civ= 4;
strcpy (a_cantiere[1].citta_C, "Palermo");
a_cantiere [1].nop_c= 10;
a_cantiere[1].adap_c =2005;
a_cantiere[1].adc_c= 2008;
strcpy (a_cantiere[2].cogn_I, "Annese");
strcpy (a_cantiere [2].nome_I, "Mirko");
strcpy (a_cantiere [2].indirizzo_C,"Via Pasubio");
a_cantiere[2].num_civ= 120;
strcpy (a_cantiere[2].citta_C, "Milano");
a_cantiere [2].nop_c= 15;
a_cantiere[2].adap_c =2004;
a_cantiere[2].adc_c= 2006;
strcpy (a_cantiere[3].cogn_I, "Giovanniello");
strcpy (a_cantiere [3].nome_I, "Marco");
strcpy (a_cantiere [3].indirizzo_C,"Via Castromediano");
a_cantiere[3].num_civ= 120;
strcpy (a_cantiere[3].citta_C, "Milano");
a_cantiere [3].nop_c= 15;
a_cantiere [3].adap_c =2013;
a_cantiere[3].adc_c= 2014;
strcpy (a_cantiere[4].cogn_I, "Di Lascio");
strcpy (a_cantiere [4].nome_I, "Rosaria");
strcpy (a_cantiere [4].indirizzo_C,"Via Garibaldi");
a_cantiere[4].num_civ= 105;
strcpy (a_cantiere[4].citta_C, "Roma");
a_cantiere [4].nop_c= 5;
a_cantiere [4].adap_c =2012;
a_cantiere[4].adc_c= 2014;
strcpy (a_cantiere[5].cogn_I, "Calabrese");
strcpy (a_cantiere [5].nome_I, "Antonio");
strcpy (a_cantiere [5].indirizzo_C,"Via Manfredi");
a_cantiere[5].num_civ= 113;
strcpy (a_cantiere[5].citta_C, "Palazzo San Gervasio");
a_cantiere [5].nop_c= 4;
a_cantiere [5].adap_c =2003;
a_cantiere[5].adc_c= 2004;
strcpy (a_cantiere[6].cogn_I, "Belsanti");
strcpy (a_cantiere [6].nome_I, "Mariella");
strcpy (a_cantiere [6].indirizzo_C,"Via Capruzzi");
a_cantiere[6].num_civ= 106;
strcpy (a_cantiere[6].citta_C, "Roma");
a_cantiere [6].nop_c= 2;
a_cantiere [6].adap_c =2002;
a_cantiere[6].adc_c= 2002;
return num_elem;
}
/*funzione per stampare una tabella contenente i dati*/
void print_cantiere (cantiere a_cantiere[], int a_num){
printf("\n\n%15s%15s%15s%15s%15s%15s%15s%15s\n", "Cognome","Nome","Indirizzo","N.civico","Città","N.operai","AnnoApertura", "AnnoChiusura");
printf("-----------------------------------------------------------------------------------------------------------------------------\n");
int i;
for(i=0; i<a_num; i++)
{
printf("%15s%15s%15s%15d%15s%15d%15d%15d\n", a_cantiere[i].cogn_I, a_cantiere[i].nome_I,a_cantiere[i].indirizzo_C,a_cantiere[i].num_civ,a_cantiere[i].citta_C,
a_cantiere[i].nop_c, a_cantiere[i].adap_c, a_cantiere[i].adc_c);
}
}
// funzione per stampare i cantieri di un ingegnere richiesto in input
void print_cantimpr(cantiere a_cantiere[], int a_num){
char cognr[100];
char nomr[100];
int i;
printf("Inserisci il cognome dell'ingegnere\n");
scanf("%s",&cognr);
printf("Inserisci il nome dell'ingegnere\n");
scanf("%s",&nomr);
for(i=1; i<=a_num; i++){
if(a_cantiere[i].cogn_I==cognr && a_cantiere[i].nome_I==nomr){
printf("%15s%15d%15s%15d%15d%15d\n",a_cantiere[i].indirizzo_C,a_cantiere[i].num_civ,a_cantiere[i].citta_C,
a_cantiere[i].nop_c, a_cantiere[i].adap_c, a_cantiere[i].adc_c);
}
}
}
//funzione che visualizza il numero di cantieri aperti rispetto ad un determinato anno inserito in input dall'imprenditore
int print_cantap (cantiere[], int a_num){
int cont,annor;
int i;
cont=0;
printf("Inserisci l'anno di apertura del cantiere\n");
scanf("%d", &annor);
for(i=1; i<=a_num; i++){
if(annor==cantiere[i].adap_c){
cont++;
}
}
return cont;
}
//funzione che visualizza i dati del cantiere con il maggior numero di operai
int print_cantmop (cantiere[], int a_num){
int f, max;
int i;
f=0;
for(i=1;i<=a_num; i++){
if (f=0){
max=cantiere[i].nop_c;
f=1;
}
else if(cantiere[i].nop_c>max){
max=cantiere[i].nop_c;
}
}
return max;
}