L'ho corretto un pò... Ho scritto //PROBLEMA come commento nel codice alla riga 46,nel while.
Ho un problema nel while....quando scrivo end nel nome per terminare l'inserimento dei dati
il programma continua a chiedermi l'inserimento dei dati.
Inoltre dopo l'inserimento non mi stampa la struttura...si blocca il programma.
Quindi sicuramente c'è un problema nella funzione....
codice:
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
struct ferie {
char *cognome;
int inizio;
int durata;
};
typedef struct ferie Ferie;
Ferie impiegati[3]; //Vettore di strttura Ferie
int prenota(Ferie*,char*,int,int); //Funzione prenota
char nome[12];
main() //MAIN
{int i,j=0,inizio,durata,q;
for(i=0;i<3;i++){ //inizializzazione struttura
impiegati[i].cognome="vuoto";
impiegati[i].inizio=0;
impiegati[i].durata=0;
}
printf("%s %d %d \n",impiegati[i].cognome,impiegati[i].inizio,impiegati[i].durata);
do{
printf("Inserisci il cognome dell'impiegato: ");
scanf("%s",&nome);
printf("Inserisci il gg d'inizio delle ferie : \n");
scanf("%d",&inizio);
if(inizio>0 && inizio<31){
printf("Inserisci la durata delle ferie : \n");
scanf("%d",&durata);
if(durata >0 && durata<8)
{prenota (impiegati,nome,inizio,durata);
j++;}
else printf("Errore! La durata va da 1 a un massimo di7gg.\n");
}
else printf("Inserisci nuovamente il nome e il giorno di inizio delle ferie(1-31).\n");
}while((strcmpi(nome,"end")) || j<3); //PROBLEMA
for(i=0;i<3;i++)
printf("%c %d %d \n",impiegati[i].cognome,impiegati[i].inizio,impiegati[i].durata);
fflush(stdin);
getchar();
}
int prenota(Ferie*w,char *nom ,int in ,int dur)
//FUNZIONE PRENOTA
{int j=0,x,i,conta=0; //Che riceve un nome il gg di inizio delle ferie
//e la durata e inserisce i dati nel vettoredi
//struttura.
//Se ci sono tre impiegati che hanno leferie
//nello stesso periodo rende 0 altrimenti 1
while((strcmpi(w[j].cognome,"Vuoto"))) j++;
w[j].cognome= nom;
w[j].inizio=in;
w[j].durata=dur;
x=j;
if(x){
for(i=1;i<x;i++){
if(w[i].inizio <= w[i-1].inizio+w[i].durata)
conta++;
}
if (conta==3) return (0);
else return (1);
}else return (1);
}