Finalmente ne sono venuto a capo, stranamente la coercizione imposta dava problemi al compilatore(mai capitato..) infatti rimuovendola il programma è stato eseguito correttamente
Volevo farti qualche domanda visto che con le strutture sono un po' imbranato:
-quando le strutture sono dichiarate come puntatori devo TASSATIVAMENTE allocare della memoria per questi? Questa è la ragione per cui quando usavo l'operatore punto per accedere ai campi delle strutture il compilatore non restituiva questo errore giusto?
-e' la prima volta che mi capita un errore dovuto alla presenza di coercizione nella malloc, come mai e' successo? Anche il mio(disastrato)manuale spiega che ci deve essere sempre...
Ad ogni modo grazie, di seguito posto il codice per chi possa averne bisogno
codice:
#include<stdio.h>#include<string.h>
#include<malloc.h>
#define NMAX 30
struct scheda
{
char nome[40];
char mansione[40];
int ore;
int salario;
};
typedef struct scheda *operaio;
int main(void)
{
operaio operaio[NMAX];
char cerca[20],nome[40],mansione[40];
int n,pos,trovato,ore,salario,l;
printf("Inserisci il numero di dipendenti: ");
scanf("%d", &n);
{
for(int i=0; i<n; i++)/*attivare switch gnu99 sul compilatore*/
{
operaio[i] = malloc(sizeof operaio);
printf("\nInserisci il nome dell'dipendente: ");
scanf("%s", nome);
strcpy(operaio[i]->nome, nome);
printf("\nInserisci il mansione: ");
scanf("%s", mansione);
strcpy(operaio[i]->mansione, mansione);
printf("\nInserisci ore di lavoro: ");
scanf("%d", &operaio[i]->ore);
printf("\nQuant'è la retribuzione di questo operaio? ");
scanf("%d", &operaio[i]->salario);
}
printf("\nInserisci il nome dell'operaio da cercare! ");
scanf("%s", cerca);
pos=0;
trovato=0;
l=strlen(cerca);
while(pos<n && !trovato)
{
if(memcmp(operaio[pos]->nome, cerca, l)==0)
{
trovato=1;
}
else
{
pos++;
}
}
if(!trovato)
{
printf("\nEsame non trovato!\n");
}
else
{
printf("\n------------------------------------------------------------------------------------");
printf("\nTrovato in posizione %d.\nScheda:\nNome: %s\nMansione: %s\nOre lavorative:%d\nSalario: %d\n",
pos+1,operaio[pos]->nome,operaio[pos]->mansione,operaio[pos]->ore,operaio[pos]->salario);
printf("\n------------------------------------------------------------------------------------");
}
}
}