Eh lo so che a livello logico non ha senso, purtroppo anche il prof non ha senso logico
Questo è il programma che ho fatto, ma mi da lista vuota sia per lPositivi che per lNegativi:
codice:
#include<stdio.h>
#include<stdlib.h>
typedef struct nd{
int val;
struct nd *next;
}TLISTA;
TLISTA *newLista();
TLISTA *addLista(TLISTA *lista, int num);
void printLista(TLISTA *lista);
void dividi(TLISTA *lista, TLISTA *lPositivi, TLISTA *lNegativi);
int main()
{
TLISTA *lInt;
TLISTA *lPositivi;
TLISTA *lNegativi;
FILE *fp;
int num;
lInt=newLista();
lPositivi=newLista();
lNegativi=newLista();
fp=fopen("dati.txt", "r");
while(fscanf(fp, "%d", &num)!=EOF){
lInt=addLista(lInt, num);
}
fclose(fp);
printf("\n Lista 'lInt':\n\n");
printLista(lInt);
printf("\n\n Lista 'lPositivi':\n\n");
dividi(lInt, lPositivi, lNegativi);
printLista(lPositivi);
printf("\n\n Lista 'lNegativi':\n\n");
printLista(lNegativi);
printf("\n\n");
system("PAUSE");
return 0;
}
TLISTA *newLista(){
return NULL;
}
TLISTA *addLista(TLISTA *lista, int num){
TLISTA *t;
TLISTA *i;
t=(TLISTA *)malloc(sizeof(TLISTA));
if(t==NULL){
printf("Errore di memoria!\n");
exit(-1);
}
else{
t->val=num;
t->next=NULL;
}
i=lista;
if(lista==NULL){
return t;
}
else{
while(i->next!=NULL){
i=i->next;
}
i->next=t;
return lista;
}
}
void printLista(TLISTA *lista){
if(lista==NULL){
printf("lista vuota!\n");
}
else{
while(lista!=NULL){
printf("%4d", lista->val);
lista=lista->next;
}
}
}
void dividi(TLISTA *lista, TLISTA *lPositivi, TLISTA *lNegativi){
TLISTA *temp;
temp=lista;
while(temp!=NULL){
if(temp->val>=0){
lPositivi=addLista(lPositivi, temp->val);
}
else{
lNegativi=addLista(lNegativi, temp->val);
}
temp=temp->next;
}
}
sapreste dirmi dove può essere l'errore?