Salve a tutti. Ho un problema per quanto riguarda le liste. Con questo codice in pratica chiedo quanti interi (compresi tra 0 e 7) voglio inserire e li inserisco, dopodichè li converto in binario.
Adesso essendo un numero che può variare allora ho preso in considerazione di creare delle liste. E così ho fatto, dopo aver creato la lista di tanti elementi quanti sono gli elementi da inserire, ho pensato di mettere dentro ad ogni elemento della lista un array di 3 posti in modo a memorizzarmi i bit di ogni elemento.
Mi da' Segmentation fault appena lo eseguo.codice:#include<stdio.h> #include<stdlib.h> struct list{ int bit[2]; struct list*next; }; struct list list_t; int prn_f(int bit[]);//SCHERMATA INIZIALE struct list *create_lst(int max);//CREO UNA LISTA DI ELEMENTI TANTI QUANTI SONO I VALORI DA INSERIRE void conv(int bit[],int max,struct list*s);//CONVERSIONE DECIMALE BINARIO void associate(struct list*s,int bit[]);//MEMORIZZA I BIT CONVERTITI NELLA LISTA void prn_lst(struct list*s);//STAMPA LISTA int main(){ //FUNZIONE PER LA CREAZIONE DELLA LISTA struct list *lst; int bit[7]; int max=prn_f(bit); lst=create_lst(max); conv(bit,max,lst); //prn_lst(lst); } //INPUT INIZIALE int prn_f(int bit[]){ int n,a,i; printf("Quanti valori vuoi inserire?\n"); scanf("%d",&n); printf("Inserire valori compresi tra 0 e 7\n"); for(i=0; i<n;i++){ scanf("%d",&a); if(a<0||a>7){ printf("ERROR\n"); exit (0); } bit[i]=a; } printf("F=(X,Y,Z)=m("); for(i=0; i<n; i++){ printf("%d",bit[i]); if(i<n-1){ printf(","); } } printf(");\n"); return n; } //CREAZIONE LISTA DI MAX ELEMENTI struct list *create_lst(int max){ struct list *start,*p; start=(struct list*)malloc(sizeof(list_t)); p=start;//CREO IL PRIMO ELEMENTO DELLA LISTA int i; for(i=0; i<max; i++){//CREO TANTI ELEMENTI DELLA LISTA QUANTI SONO I VALORI INSERITI p->next=(struct list*)malloc(sizeof(list_t)); p=p->next; } p->next=NULL; return start; } //FUNZIONE CONVERSIONE DECIMALE BINARIO void conv(int bit[],int max,struct list*s){ int i,j; int byte=8; int tmp; struct list*start,*p; start=s; p=start; for(j=0; j<max; j++){ tmp=bit[j]; byte=4; for(i=0; i<3; i++){ if(tmp!=0||byte!=0){ if(tmp>=byte){ printf("1");//AL POSTO DI PRINT IL VALORE DOVRÀ ESSERE PASSATO ALL'ARRAY DELLA LISTA p->bit[i]=1; tmp=tmp-byte; byte=byte/2; } if(tmp<byte){ printf("0");//STESSA COSA QUI p->bit[i]=0; byte=byte/2; } } p=p->next; } printf("\n"); } p=start; prn_lst(p); } //STAMPA LA LISTA void prn_lst(struct list*s){ struct list *start,*p; printf("LA LISTA STAMPATA SARÀ\n"); start=s; p=start; int i; while(p->next){ for(i=0; i<3; i++){ printf("%d",p->bit[i]); } printf("\n"); p=p->next; } }
Chi mi aiuta ? Grazie !

Rispondi quotando