Ragazzi questo è il codice:
Ho messo in grassetto il punto dove mi crea problemi il codice. In pratica devo eliminare i multipli di ogni numero (crivello di Eratostene) e ho creato quell'agoritmo, solo che il programma mi crasha sia chiamando la funzione scritta alla fine e sia scrivendola direttamente nel while (l'ho messa tra commenti).codice:#include <stdio.h> #include <stdlib.h> #include <time.h> typedef struct dati* numero; struct dati { int numero; numero next; }; /* run this program using the console pauser or add your own getch, system("pause") or input loop */ numero lsist_delete_node(numero x); void search_node(numero* n); void stampalista(numero n); int cercanumero(int m,int array[50]); numero lsist_insert_order(numero head,numero n); int main(int argc, char *argv[]) { srand(time(NULL)); FILE* fp; int x; int l; fp=fopen("numericasuali.txt","w"); int array[51]; for (x=0;x<50;x++) { int s=2 + rand() %51; if (l=cercanumero(s,array)!=0) array[x]=s; else x--; } for (x=0;x<50;x++) { if(x==49) fprintf(fp,"%d",array[x]); else fprintf(fp,"%d\n",array[x]); } fclose(fp); fp=fopen("numericasuali.txt","r"); numero il=NULL; numero nodo=NULL; while(!feof(fp)) { nodo=malloc(sizeof(struct dati)); fscanf(fp,"%d\n",&nodo->numero); nodo->next=NULL; il=lsist_insert_order(il,nodo); } fclose(fp); numero temp=il; while(temp!=NULL) { int z=temp->numero; if(temp->next->numero%z==0) { temp=lsist_delete_node(temp); /*if(temp->next==NULL) temp->next=NULL; else{ numero tmp=temp->next; temp->next=tmp->next;}*/ } temp=temp->next; } stampalista(il); system ("PAUSE"); return 0; } /*void search_node(numero* n) { int m=(*n)->numero; while((*n)!=NULL) { if(m%(*n)->next->numero==0) delete_node(&n); } } */ int cercanumero(int m,int array[50]) { int x;int s; for (x=0;x<50;x++) { if (array[x]==m ){ int s=0; return s;} } int o=10; return o; } numero lsist_insert_order(numero head,numero n){ /*Se la lista è vuota deve mettere il nodo n in testa*/ if(head==NULL) return n; /*ritorna n come testa della lista*/ numero t=head; /*t puntatore di appoggio per scorrere la lista*/ /*Controlla se deve inserire il nodo n in testa alla lista*/ if (n->numero < t->numero) { n->next=t; /*sposta il puntatore del nodo successivo di n alla vecchia testa*/ return n; /*ritorna n come testa della lista*/ } /*Scorre la lista */ while(t->next!=NULL) { /*si ferma all'ultimo nodo*/ if (n->numero < t->next->numero) { /*confronta i campi item fra n e il nodo successivo a t*/ n->next=t->next; /*inserisce il nodo n */ t->next=n; /* dopo il nodo t */ return head; /*ritorna la testa*/ } t=t->next; /*sposta t al nodo successivo per scorrere la lista*/ } t->next=n; /*aggiunge n alla fine della lista*/ return head; /*ritorna la testa*/ } void stampalista(numero n) { while(n!=NULL) { printf ("%d\n",n->numero); n=n->next; } } numero lsist_delete_node(numero x){ if (x->next==NULL) return x; numero t=x->next; /*salvo il puntatore al nodo da togliere in t */ x->next=t->next; /*tolgo il nodo t dalla lista */ return x; }
Un aiutino?

Rispondi quotando