Newsgroup: it.comp.lang.c
Titolo: Perchè?

Perchč il maledetto muore se premo la e per farlo uscire dopo aver fatto
qualsiasi altra operazione?
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <float.h>
#define  White  -1    \\ non visitato
#define  Gray   0    \\ in coda
#define  Black   1    \\ visitato
#define  MAX    100
typedef struct grafo
{
  double valore;
  char nome[100];
  unsigned char info[1024];
  char color;
  double distanza;        // somma dei pesi nel cammino dalla radice al nodo
  struct grafo *pred;     // predecessore nel cammino dalla radice
  struct arco *adj;       // lista dei nodi adiacenti
  struct grafo *next;
} GRAFO;
typedef struct arco
{
  double peso;
  int info;
  struct grafo *nodo;
  struct arco *next;
} ARCO;
int insertnewnode (GRAFO **G, double val, char *nome, void *buffer);
GRAFO *search(GRAFO *G, char *str);
int deletenote(GRAFO **G, char *nome);
int insertnewlink(GRAFO *G, char *nodoA, char nodoB, double peso, int info);
int bfs(GRAFO *G, char *nodo, coda *Q);
GRAFO *findlast(GRAFO *);
int insertnewnode (GRAFO **G, double val, char *nome, void *buffer)
{
 GRAFO *tmp=NULL,*prec=NULL;
 if(search(*G,nome)) return -1;
 if (!(*G))
 {
  (*G)=(GRAFO *)malloc(sizeof(GRAFO));
  (*G)->valore=val;
  strcpy((*G)->nome,nome);
  memcpy((*G)->info,buffer,1024);
  (*G)->next=(*G);
  (*G)->adj=NULL;
  return 0;
 }
 else
 {
  if(search(*G,nome)) return -1;
  prec=findlast(*G);
  tmp=(GRAFO *)malloc(sizeof(GRAFO));
  tmp->valore=val;
  strcpy(tmp->nome,nome);
  memcpy(tmp->info,buffer,1024);
  tmp->adj=NULL;
  tmp->next=(*G);
  prec->next=tmp;
 }
 return 0;
}
GRAFO *findlast(GRAFO *G)
{
 GRAFO *tmp=G, *lastnode=NULL;
 do
 {
  lastnode=tmp;
  tmp=tmp->next;
 }while(tmp!=G);
 return lastnode;
}
GRAFO *search(GRAFO *G, char *str)
{
 GRAFO *tmp=G;
 if(!G) return NULL;
 do
 {
   if (!strcmp(tmp->nome,str)) return tmp;
   tmp=tmp->next;
 }while(tmp!=G);
 return NULL;
}
int deletenode(GRAFO **G, char *nome)
{
 GRAFO *nodo=NULL, *prec=NULL, *tmp=NULL;
 ARCO *adiacenti=NULL, *temp=NULL;
 if(!(nodo=search(*G,nome))) return -1;
 if(nodo==*G)
 {
  (*G)=NULL;
  return 0;
 }
 tmp=nodo;
 do
 {
  prec=tmp;
  tmp=tmp->next;
 } while(tmp!=nodo);
 prec->next=nodo->next;
 tmp=(*G);
 do
 {
  for(adiacenti=tmp->adj;adiacenti;temp=adiacenti,adiacenti=adiacenti->next)
   if(adiacenti->nodo==tmp)
   {
    temp->next=adiacenti->next;
    break;
   }
   tmp=tmp->next;
 } while(tmp!=(*G));
 return 0;
}
int insertnewlink(GRAFO *G, char *nodoA, char *nodoB, double peso, int info)
{
 GRAFO *a=NULL, *b=NULL;
 ARCO *link=NULL;
 if(!G) return -2;
 a=search(G,nodoA);
 b=search(G,nodoB);
 if(!a || !b) return -2;
 link=a->adj;
 while(link)
 {
  if(link->nodo==b) return -1;
  link=link->next;
 }
 link=(ARCO *)malloc(sizeof(ARCO));
 link->nodo=b;
 link->peso=peso;
 link->info=info;
 if(a->adj!=NULL) link->next=a->adj;
 else link->next=NULL;
 a->adj=link;
 return 0;
}
main()
{
 GRAFO *G=NULL, *t=NULL, *destinazione=NULL;
 double val;
 char *nome, *nomeA, *nomeB;
 unsigned char buffer[1024];
 char scelta[80];
 int info, ris;
 for(;;)
 {
  printf("\n\n\n  ****  MENU  ****");
  printf("\nN. InsertNewNode  ");
  printf("\nS. Search  ");
  printf("\nD. Delete  ");
  printf("\nL. InsertNewLink  ");
 printf("\nE. Esci ");
  printf("\n\n Fai la tua scelta: "); scanf("%s",scelta);
  switch(*scelta)
  {
   case 'n':
   case 'N':
     printf("\n\nInserisci il valore: ");scanf("%lf",&val);
     printf("\nInserisci il nome: ");scanf("%s",nome);
     printf("\nInserisci il buffer: ");scanf("%s",buffer);
     if(!insertnewnode(&G,val,nome,&buffer))
      printf("\nInserimento riuscito\n");
     else printf("\nInserimento non riuscito\n");
     break;
   case 's':
   case 'S':
     printf("\n\nInserisci il nome: ");scanf("%s",nome);
     t=search(G,nome);
     if(!t) printf("\nNon trovato");
     else
     {
      printf("\nnome = %s",t->nome);
      printf("\nvalore = %lf",t->valore);
      printf("\nbuffer = %s",t->info);
     }
     break;
   case 'd':
   case 'D':
     printf("\n\nInserisci il nome: ");scanf("%s",nome);
     if(deletenode(&G,nome)==0) printf("\nElemento cancellato");
     else printf("\nCancellamento non riuscito");
     break;
   case 'l':
   case 'L':
     printf("\n\nInserisci il nome del nodo da cui deve partire il link:
");scanf("%s",nomeA);
     printf("\nInserisci il nome cui deve arrivare il link:
");scanf("%s",nomeB);
     printf("\nInserisci il peso: ");scanf("%lf",&val);
     printf("\nInserisci l'informazione: ");scanf("%d",&info);
     ris=insertnewlink(G,nomeA,nomeB,val,info);
     if(ris==-1)
      printf("\nLink gi. presente");
     else if(ris==-2)printf("\nLinK non inserito");
     else printf("\nLink inserito");
     break;
  case 'e':
   case 'E':
     exit(0);
  }*scelta=0;
 }
}

 wrote in message
8jtc5f$hlk$1...@lacerta.tiscalinet.it...
| Perchè il maledetto muore se premo la e per farlo uscire dopo aver fatto
| qualsiasi altra operazione?
forse sostituendo gli
scanf("%s",variabile);
con
scanf("%s",&variabile);
(non ho provato, ma...)
--
PGP public key available
____ __         __,_      __  _____
\  _\_ \  ___ _/ / /\  /\/  \/ / _/ It is better to reign in Hell
 \  _ \ \/ _ '/ , |\ VV / / / / _/ Than serve in Heaven.- MILTON
  \_,_/\_\_,_/_/|_| \__/\__/_/_/  ICQ  : 75043214
      -- the one and only --     Mail : 
oynx...@gvfpnyvarg.vg
The UNIX Guru's View of Sex:    Home : 
web.tiscalinet.it/blakwolf
$unzip;strip;touch;finger;mount;fsck;more;yes;umount;sleep