|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jun 2000
Città: Milano
Messaggi: 136
|
Problema C AIUTO PLS
Ciao a tutti
ho riscontrato un problema durante la compilazione in questa parte di programma: int verifica(int s,PUNT **H,int *w){ NODO *q,*z; PUNT *c; for (q=p;q!=NULL;q=q->next) for (z=q;z->k!=s || z->down!=NULL;z=z->down) if(z->k==s){ *w=1; if(*H==NULL){ *H=(PUNT*)malloc(sizeof(PUNT)); *H->next=NULL; //riga 54 *H->p=q;}//riga 55 else{ c=(PUNT*)malloc(sizeof(PUNT)); c->p=q; c->next=H; *H=c;} return 1;} else return 0;} Il compilatore mi scrive così: STALA.c: In function `verifica': STALA.c:54: request for member `next' in something not a structure or union STALA.c:55: request for member `p' in something not a structure or union La mia struttura è questa: typedef struct punt { NODO *p; struct punt *next; }PUNT; Sembra che non veda questa struttura che sta in un file .h che ovviamente ho specificato con #include "STALA.h" Ciao a tutti e grazie
__________________
athlon xp-m 2400Mhz asus a7n8x-x ati 9800 aiw@9800pro |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Jun 2000
Città: Milano
Messaggi: 136
|
Ho risolto qualche problema ma il compilatore fa ancora capricci.
La funzione: int verifica(int s,PUNT **H,int *w){ NODO *q,*z; PUNT *c; for (q=p;q!=NULL;q=q->next) for (z=q;z->k!=s || z->down!=NULL;z=z->down) if(z->k==s){ *w=1; if(*H==NULL){ *H=(PUNT*)malloc(sizeof(PUNT)); *H->next=NULL; *H->p=q;} else{ c=(PUNT*)malloc(sizeof(PUNT)); c->p=q; c->next=*H; *H=c;} return 1;} else return 0;} Il compilatore dice: gcc: P: No such file or directory STALA.c: In function `verifica': STALA.c:56: request for member `next' in something not a structure or union STALA.c:57: request for member `p' in something not a structure or union La struttura è sempre quella di prima non so che dire. AIUTO! CIAO e grazie
__________________
athlon xp-m 2400Mhz asus a7n8x-x ati 9800 aiw@9800pro |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Jun 2000
Città: Milano
Messaggi: 136
|
Ho risolto la storia del doppio puntatore.
Adesso mi dice solo: gcc: Pr: No such file or directory Dopo aver scritto : gcc -o -Wall Pr P.c STALA1.c AIUTO!!! CIAO e grazie
__________________
athlon xp-m 2400Mhz asus a7n8x-x ati 9800 aiw@9800pro |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Dec 1999
Messaggi: 139
|
devi specificare il nome del file eseguibile subito dopo l' opzione -o credo:
... -o Pr -Wall
__________________
Ingegnere: colui che ha molta familiarità con i modelli e molto poca con le modelle. |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Jun 2000
Città: Milano
Messaggi: 136
|
Compilato!
ma adesso mi va in ciclo infinito ARGGG!!! vi posto il codice della parte che secondo me crea questo problema: void inserisci_stag(a,b,h){ int s,w,c,e; w=0; H=NULL; for(c=a;c!=b-1;c++){ for(e=0;e!=h;e++){ s=(e*m)+c; if(verifica(s,&w)==0 || w==0 || p==NULL){insert(s);} else {concatena(s);}}} Provando con delle printf mi è sembrato di capire che il problema lo creano i 2 for. AIUTOOOOOOO!!!!!!!!!!!! Ciao e grazie
__________________
athlon xp-m 2400Mhz asus a7n8x-x ati 9800 aiw@9800pro |
|
|
|
|
|
#6 | |
|
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
Quote:
Per vedere se il problema e'ì questo prova a cambiare i due for con delle disuguaglianze, ad esempio for(c=a;c < b-1;c++){ for(e=0; e<h;e++){ Se il problema e' li' , il ciclo termina subito |
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Jun 2000
Città: Milano
Messaggi: 136
|
GRANDE!!!MARCO
ho tolto il ciclo infinito!!! ma adesso ho qualche problemino.................. vi terrò al corrente nei prossimi minuti =P CIAO e grazie
__________________
athlon xp-m 2400Mhz asus a7n8x-x ati 9800 aiw@9800pro |
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Jun 2000
Città: Milano
Messaggi: 136
|
adesso sono in fase di debugging e si forma ancora un ciclo infinito:
void inserisci_stat(a,b,h){ int s,w,c,e; w=0; H=NULL; for (c=a;c<b-1;c++){ for (e=n;e<h;e--){ s=(e*m)+c; if(verifica(s,&w)==0 || w==0 || p==NULL){insert(s);} else {concatena(s);}}}} void insert(s){ NODO *z; if(p==NULL) {z=(NODO*)malloc(sizeof(NODO));printf("Insert...\n"); p=z; p->k=s; p->next=NULL; p->down=NULL;} else {z=(NODO*)malloc(sizeof(NODO)); z->k=s; z->next=p; p=z; z->down=NULL;}} La funzione verifica è quella di prima. Non mi entra neanche in concatena il problema sono i 2 for(credo). Non ne ho idea!! AIUTO!!!!! GRAZIE A TUTTI CIAO
__________________
athlon xp-m 2400Mhz asus a7n8x-x ati 9800 aiw@9800pro |
|
|
|
|
|
#9 | |
|
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
Quote:
Se tu fai calare e e ti interessa continuare il ciclo finche' non raggiunge h, devi stare attento al primo passo ! Se n<h , allora facendo decrementare e, questo sara' sempre minore di h , e quindi non si fermera' mai ! Prova con for (e=n;e>h;e--){ ovvero cambia il < in >. Cosi' se al primo passo "sfori" il controllo, almeno ti si ferma subito. L'importante e' che tu abbia capito perche' va messa la disuguaglianza ! Attento pero' . Come il for che ti ho sistemato nel post precedente, non e' detto che sia la soluzione appropriata ! Lo e' se il caso n<h e' un caso particolare in cui non occorre fare niente . Se invece non dovrebbe succedere, allora il problema e' a monte, quando passi i parametri alla funzione. Spero di essere stato chiaro ( difficile conoscendomi |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:04.



















