Newsgroup: it.comp.lang.c++
Titolo: if-else

Ciao,
c'è qualcuno che può dirmi perchè con l'utilizzo di if- else il programma
non funziona a dovere??
Vi propongo una parte del programma, nel quale vorrei fare in modo di
visualizzare l'albero binario in modi diversi a seconda del numero di
cerchi, utilizzando il costrutto if-else.
Premetto che senza questa clausola il programma funziona perfettamente.
int Epoint  =1; int Eline   =2; int Epline  =3; int Etext   =4; int Ecircle
=5;
int cerchi(FILE *fp);           /* Conta i cerchi presenti nel file DXF */
int Entita(FILE*);       /* Valuta il tipo di oggetto presente nel file DXF
*/
struct nodo *alb_bin(FILE *);     /* Prende i dati dal file per la
costruzione dell'albero binario */
void anticipato(struct nodo *);  /* Visita le radici dell'albero binario e
le stampa a video */
void grafo(struct nodo *, int, int);    /* Visita le radici dell'albero
binario e le stampa a video */
main()
{
FILE *fp;
char file[30];
struct nodo *radice;
int i;
int k;
printf("\n\n\nInserire il nome del file DXF: ");
gets(file);
fp = fopen(file, "r");
if(fp == NULL) {
  printf("Il file %s non esiste.\n", file);
  exit(1);
}
Il problema dovrebbe essere qui:
assegno a k il valore ritornato dalla funzione cerchi e valuto se è <=10. Se
lo è visualizzo l'albero binario in un modo, altrimenti, se k>10, lo
visualizzo in un altro modo.
k=cerchi(fp);
if(k<=10) {
do{
   i= Entita(fp);    /* La funzione Entita ritorna -1 se e' a fine file*/
   if(i==Epoint){
      printf("\nNel file non ci sono cerchi\n");
      exit(2);}
   if(i==Epline){
      printf("\nNel file non ci sono cerchi\n");
      exit(3);}
   if(i==Ecircle){
      radice = alb_bin(fp);      /* Invoca la funzione alb_bin */
      clrscr();
      grafo(radice, 35, 1);}    /* Invoca la funzione grafo */
   if(i==Eline){
      printf("\nNel file non ci sono cerchi\n");
      exit(4);}
   if(i==Etext){
      printf("\nNel file non ci sono cerchi\n");
      exit(5);}
   }while(i!=-1);}
else{
do{
   i= Entita(fp);
   if(i==Epoint){
      printf("\nNel file non ci sono cerchi\n");
      exit(2);}
   if(i==Epline){
      printf("\nNel file non ci sono cerchi\n");
      exit(3);}
   if(i==Ecircle){
     radice = alb_bin(fp);
     printf("\nQuesto è l'albero binario ordinato secondo il criterio
dato:\n");
     anticipato(radice);}       /* Invoca la funzione anticipato */
   if(i==Eline){
      printf("\nNel file non ci sono cerchi\n");
      exit(4);}
   if(i==Etext){
      printf("\nNel file non ci sono cerchi\n");
      exit(5);}
   }while(i!=-1);}
fclose(fp);        /* Chiude il file */
return 0;
}
L'output del programma è un cursore lampeggiate, situato nella riga sotto la
richiesta del nome del file.
Secondo voi, ma perchè fa cosi' ?????
Grazie per l'aiuto, Ciao.
Stefano

Ho provato a riscrive il codice da te scritto e non mi sembra che ci siano
errori di sintassi, per quanto riguara quelli di run time o di logica
dovrei avere i sorgenti completi.
Comunque perché non provi a scrivere:
               if( cond ) {
                             }
               else if( cond ) {
                                    }
              oppure:
              if( cond ) {
                            }
              else {
                       if(cond) { 
                                   }
                     }
in modo da ottenere if nidificati piuttosto che tanti if separati?