Newsgroup: it.comp.lang.c
Titolo: Non capisco perchè si blocca

Dovrebbe ricevere i dati di un triangolo rettangolo, ricevendo le 
incognite con valore 0. Quindi calcolerà i risultati attraverso i  teoremi 
della trigonometria. 
Però il programma si blocca non appena finisco l'immissione dei dati. 
--
Questo articolo e` stato inviato da 
http://www.undergroundsecurity.net
Segnala gli abusi ad 
ab...@undergroundsecurity.net

 Perň il programma si blocca non appena finisco l'immissione dei dati. 
Scommettiamo che indovino senza guardare il codice ?
Stai usando delle scanf() in sequenza, senza svuotare il buffer di input
tra l'una e l'altra.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Però il programma si blocca non appena finisco l'immissione dei dati. 
ma mi sono dimenticato di trascrivere il programma. Eccolo
#include <stdio.h>
#include<math.h> 
double a, b, i, Ag, Bg, Ar, Br, area, perimetro;
double angolo;
double calcang(){
angolo=180.0-(Ag+Bg);
}
double ipotenusa(){
double i2;
	if ((a!=0.0)&&(Ar!=0.0)){
	   i=a/sin(Ar);
	   return i;}
 
	if ((a!=0.0)&&(Br!=0.0)){
	   i=a/cos (Br);
	   return i;}
 
	if ((b!=0.0)&&(Br!=0.0)){
	   i=b/sin(Br);
	   return i;}
 
	if ((b!=0.0)&&(Ar!=0.0)){
	   i=b/cos(Ar);
	   return i;}	
 
	if ((a!=0.0)&&(b!=0.0)){
	   i2=((a*a)+(b*b));	
	   i=sqrt(i2);	  
	   return i;}
 
 
}
double catetoa(){
double a2;
	if ((i!=0.0)&&(Ar!=0.0)){
	    a=i*sin(Ar);
	    return a;}
        if ((i!=0.0)&&(Br!=0.0)){
            a=i*cos(Br); 
            return a;}
        if ((b!=0.0)&&(Ar!=0.0)){
            a=b*tan(Ar);
            return a;} 
        if ((i!=0.0)&&(b!=0.0)){
            a2=((i*i)-(b*b));
            a=sqrt (a2);
            return a;}           
        if ((b!=0.0)&&(Br!=0.0)){
            a=b/ tan(Br);
            return a;}
 
}
double catetob(){
       if ((i!=0.0)&&(Br!=0.0)){
           b=i*sin(Br);
           return b;}
       if ((i!=0.0)&&(Ar!=0.0)){
           b=i*cos(Ar);
           return b;}          
       if ((a!=0.0)&&(Br!=0.0)){
           b=a*tan(Br);
           return b;}
       if ((a!=0.0)&&(Ar!=0.0)){
           b=a/tan(Ar);
           return b;}
 
}
double angA(){
 
       if ((a!=0.0)&&(i!=0.0)){
           Ar=asin(a/i);
           return Ar;} 
 
 
       if ((b!=0.0)&&(i!=0.0)){
           Ar=acos(b/i);
           return Ar;} 
 
       if ((b!=0.0)&&(a!=0.0)){
           Ar=atan(a/b);
           return Ar;} 
 
}
double angB(){
 
       if ((a!=0.0)&&(i!=0.0)){
           Br=acos(a/i);
           return Br;} 
       if ((b!=0.0)&&(i!=0.0)){
           Br=asin(b/i);
           return Br;}
 
 
       if ((b!=0.0)&&(i!=0.0)){
           Br=atan(b/a);
           return Br;}
 
}
main(){
printf ("programma per la risoluzione dei triangoli 
rettangoli.");/*immissione dei dati*/
printf ("\n\nInserire i dati impostando le incognite a 0");
printf ("\nInserire i valori in cm e in gradi");
printf ("\n\nvalore primo cateto"); 
scanf ("%f", &a);
printf ("\nvalore del secondo cateto");
scanf ("%f", &b);
printf ("\nvalore dell'ipotenusa");
scanf ("%f", &i);
printf ("ora prendendo come cateto di riferimento il primo ");
printf ("\nvalore dell'agolo opposto");
scanf ("%f", &Ag);
printf ("\nvalore angolo adiacente");
scanf ("%f", &Bg);
Ar=(Ag*3.141593)/180;
Br=(Bg*3.141593)/180;
do {
if((Ag==0.0)&&(Bg!=0.0))Ag=calcang();
if((Ag!=0.0)&&(Bg==0.0))Ag=calcang();
Ar=Ag*(3.141593/180);
Br=Bg*(3.141593/180);
if((i==0.0)){ i=ipotenusa();}
if(a==0.0){a=catetoa();}
if(b==0.0){b=catetob();}
if(Ar==0.0){Ar=angA();}
if(Br==0.0){Br=angB();}
} while ((a!=0.0)&&(i!=0.0)&&(b!=0.0)&&(Ar!=0.0)&&(Br!=0.0));
Ag=Ar*(180/3.141593);
Bg=Br*(180/3.141593);


prima ho dimenticato di inserire il codice. Eccolo. 
#include <stdio.h>
#include<math.h> 
double a, b, i, Ag, Bg, Ar, Br, area, perimetro;
double angolo;
double calcang(){
angolo=180.0-(Ag+Bg);
break;
}
double ipotenusa(){
double i2;
	if ((a!=0.0)&&(Ar!=0.0)){
	   i=a/sin(Ar);
	   return i;}
 
	if ((a!=0.0)&&(Br!=0.0)){
	   i=a/cos (Br);
	   return i;}
 
	if ((b!=0.0)&&(Br!=0.0)){
	   i=b/sin(Br);
	   return i;}
 
	if ((b!=0.0)&&(Ar!=0.0)){
	   i=b/cos(Ar);
	   return i;}	
 
	if ((a!=0.0)&&(b!=0.0)){
	   i2=((a*a)+(b*b));	
	   i=sqrt(i2);	  
	   return i;}
 
break;   
}
double catetoa(){
double a2;
	if ((i!=0.0)&&(Ar!=0.0)){
	    a=i*sin(Ar);
	    return a;}
        if ((i!=0.0)&&(Br!=0.0)){
            a=i*cos(Br); 
            return a;}
        if ((b!=0.0)&&(Ar!=0.0)){
            a=b*tan(Ar);
            return a;} 
        if ((i!=0.0)&&(b!=0.0)){
            a2=((i*i)-(b*b));
            a=sqrt (a2);
            return a;}           
        if ((b!=0.0)&&(Br!=0.0)){
            a=b/ tan(Br);
            return a;}
break;        
}
double catetob(){
       if ((i!=0.0)&&(Br!=0.0)){
           b=i*sin(Br);
           return b;}
       if ((i!=0.0)&&(Ar!=0.0)){
           b=i*cos(Ar);
           return b;}          
       if ((a!=0.0)&&(Br!=0.0)){
           b=a*tan(Br);
           return b;}
       if ((a!=0.0)&&(Ar!=0.0)){
           b=a/tan(Ar);
           return b;}
      break;
}
double angA(){
 
       if ((a!=0.0)&&(i!=0.0)){
           Ar=asin(a/i);
           return Ar;} 
 
 
       if ((b!=0.0)&&(i!=0.0)){
           Ar=acos(b/i);
           return Ar;} 
 
       if ((b!=0.0)&&(a!=0.0)){
           Ar=atan(a/b);
           return Ar;} 
      break;
}
double angB(){
 
       if ((a!=0.0)&&(i!=0.0)){
           Br=acos(a/i);
           return Br;} 
       if ((b!=0.0)&&(i!=0.0)){
           Br=asin(b/i);
           return Br;}
 
 
       if ((b!=0.0)&&(i!=0.0)){
           Br=atan(b/a);
           return Br;}
       break;
}

Ar=(Ag*3.141593)/180;
Br=(Bg*3.141593)/180;
do {
if((Ag==0.0)&&(Bg!=0.0))Ag=calcang();
if((Ag!=0.0)&&(Bg==0.0))Ag=calcang();
Ar=Ag*(3.141593/180);
Br=Bg*(3.141593/180);
if((i==0.0)){ i=ipotenusa();}
if(a==0.0){a=catetoa();}
if(b==0.0){b=catetob();}
if(Ar==0.0){Ar=angA();}
if(Br==0.0){Br=angB();}
} while ((a==0.0)&&(i==0.0)&&(b==0.0)&&(Ar==0.0)&&(Br==0.0));
Ag=Ar*(180/3.141593);
Bg=Br*(180/3.141593);
