PDA

View Full Version : [C] altri errori col dev c++


Tony Hak
04-12-2007, 13:22
ciao ! .. ho questa funzione :

int g_add(graph *G, int u, int v, int d)
{
edge *new,*e;
int trovato =0;
/*code*/
new = (edge*)malloc(sizeof(edge));
if (new==NULL)
printf("ERRORE: impossibile allocare memoria \n");
else
{
new->key=v;
new->dist=d;
new->next=NULL;
if (G->adj[u] == NULL) /*il nodo u non ha archi */
G->adj[u] = new;
else
{
e=G->adj[u];
if (e->key != v) /*controllo sul primo nodo*/
{
while ((e->next!=NULL) && (trovato == 0))
{
if (e->next->key == v)
{ /*controllo dal secondo nodo*/
trovato =1;
distanza = e->next->dist;
}
else
e=e->next;
}
if (trovato == 0)
e->next=new;

}
else trovato =1;
}
}
return trovato;
}

e questi errori che non so a cosa sono dovuti ...

In function `int g_add(graph *, int, int, int)':
116: parse error before `new'
119: parse error before `='
120: parse error before `=='
128: parse error before `;'
132: `e' undeclared (first use this function)
132: (Each undeclared identifier is reported only once
132: for each function it appears in.)
145: parse error before `;'
149: confused by earlier errors, bailing out

le strutture sono

typedef struct edge
{
int key;
int dist;
struct edge *next;
} edge;

typedef struct graph
{
int nv; /* numero di vertici del grafo */
edge **adj; /* vettore con le liste delle adiacenze */
} graph;


struct rec
{
int key;
int numero;
char nome [70];
int ore;
int fatturato;
struct rec *next;
};

aiuto :( ...

Volutomitra
04-12-2007, 13:39
new è una parola chiave del C, non puoi chiamare così una variabile...

Tony Hak
04-12-2007, 14:11
grazie mille..era quello il motivo .. pero' sai ... questo programma è uan riscrittura in ordine del vecchio .. e col vecchio girava..mah ... cmq grazie ancora e scusate queste domande banali ma sono nuovo nel campo :) .. sbagliando si impara :D ciao

Tony Hak
05-12-2007, 10:35
ciao ! voglio evitare di aprire altri post .. :) quindi quest'altro problema che ho riscontrato lo posto qui ...
in pratica quando passo un puntatore al primo elemento di una lista in una funzione mi viene restituito lo stasso puntatore che pero' non punta piu' al primo elemento .. com'e' possibile ???? ora vi spiego meglio :

ho il seguente codice

switch (sceltamenu)
{
case 1:
{
printf ("\nQuante citta' vuoi inserire? ");
scanf ("%d",&numc);
grafo = g_empty(numc);
lista = crea_lista(numc);
p=lista;
collegamenti (grafo,numc,p);
}break;
case 2:
{
aggiuntacoll (grafo,numc,p);
}break;
}

come potete notare per per evitare che il puntatore "lista" si sposti dal primo elemento della lista ho usato un'altro puntatore .. "P"..pero' cmq il puntatore lista si spota dal primo nodo ! ..com'e' possibile ? ..grazie del generoso aiuto ! :)

ecco ...

wingman87
05-12-2007, 11:09
Dovresti postare tutto il codice altrimenti non si capisce.

Tony Hak
05-12-2007, 11:14
posto il codice della funzione chiamante


come puoi ben vedere ..lista non viene assolutemente menzionata .. .

wingman87
05-12-2007, 11:23
Ma alla fine dove punta lista?

Tony Hak
05-12-2007, 11:24
Ma alla fine dove punta lista?

al primo elemento ... solo che dp la funzione che ti ho scritto punta a NULL ..

Tony Hak
05-12-2007, 11:36
al primo elemento ... solo che dp la funzione che ti ho scritto punta a NULL ..

HO TROVATO L'ERRORE !!! Lista non l'ho dichiarata come variabile globale !! :) grazie mille per la pazienza e l'aiuto !!! :D

Tony Hak
06-12-2007, 09:19
questa volta giuro che è una vera stranezza :D Perche' questo ciclo do while non funge? :mc:

do
{
printf ("\n----------------------------------------");
printf ("\n| |");
printf ("\n| MENU |");
printf ("\n| |");
printf ("\n----------------------------------------");
printf ("\n");
printf ("\n(-1-) Aggiungi collegamento\n");
scanf ("%d",&sceltam);
}while (sceltam != 1);

switch (sceltam)
{
case 1:
{
numc = aggiuntacoll(grafo,numc,lista);
printf ("\nNUMCITTA %d",numc);
break;
}
}

In pratica il menu esce ... ma qualunque numero metto comrpeso 1 il menu si ripete ... quindi non esce dal ciclo... se invece metto sceltam == 1 mi si blocca ed esce l'errore di winzozz che dice di inviare il problema :help:

banryu79
06-12-2007, 10:57
L'identificatore "sceltam" di che tipo è?
Cioè, l'hai dichiarato di tipo int, vero?

Tony Hak
06-12-2007, 11:08
L'identificatore "sceltam" di che tipo è?
Cioè, l'hai dichiarato di tipo int, vero?

si ... ora l'ho levato il do while e ho fatto solo il case..e .... non entra nel case !

printf ("\n----------------------------------------");
printf ("\n| |");
printf ("\n| MENU |");
printf ("\n| |");
printf ("\n----------------------------------------");
printf ("\n");
printf ("\n(-1-) Aggiungi collegamento\n");
printf ("\n(-2-) Rimozione collegamento\n");
scanf ("%d",&sceltam);


switch (sceltam)
{
case 1:
{
numc = aggiuntacoll(grafo,numc,lista);
break;
}
case 2:
{
rimozionecoll (grafo,numc,lista);
break;
}
}

le funzioni ..funzionano ... infatti le ho provate senza case e va tutto bene ...