ciao , ho guardato un po i messaggi che hai scritto ,
Credo che il problema sia , S1 e N1 sono due array distinti e non hanno nulla in comune !
S1 non è contenuto in N1 !
Tu inseristi i dati in S1 , ma la struct scheda_cellulare di N1 non è mai inizializzata
da cui i valori dei vari campi sono del tutto casuali .
quando nella funzione crea lista , poni queste condizioni
if(Neg[i].c.peso>100) , fai un confronto su campi che non sono mai stati inizializzati.
i dati le devi inserire nella struct Neg[i].c , e non in S1 .
codice:
main....
leggi(N1);
-------------------------
void leggi(N S1) {
int i;
for(i=0;i<Smax;i++) {
S1[i].c.codice_modello=i+1;
printf("Inserire la durata batteria del modello cell %d\n",i+1);
scanf("%d",&S1[i].c.durata_batteria);
.....
.....
.....
oltretutto , puoi stampare solo se il peso del cellulare è superiore a 100
visto che stampi solo tmp=testaL1; , se crei la lista testal2 non stamperebbe niente comunque