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.
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;
}
}
Mi da' Segmentation fault appena lo eseguo.
Chi mi aiuta ? Grazie !