kos_90
12-11-2009, 12:16
ciao a tutti!
ho iniziato a studiarmi un po il c e ho iniziato a scrivere un programmino di geometria (piu che altro a scopo mio didattico perchè fa poco :D );
il programma è cosi strutturato: nella main() vengono chiamate le funzioni richieste dall'utente (Calcola_figura), ciascuna delle quali è in grado di produrre un output su file, come nel codice sotto;
il mio problema è che vorrei fare in modo che l'output di ogni funzione venisse scritto in un file "virtuale" (cioè non direttamente su un file di testo) che main() sia sempre in grado di leggere, e che al prompt da parte di main() prima di uscire chieda all''utente se desidera stampare tutto l'output delle singole funzioni in un unico file di testo.
come posso fare? spero di essere stato chiaro :D
riporto sotto il sorgente;
/*Author: Glauco Ciullini*/
//includo le librerie necessarie
#include <stdio.h>
#include <math.h>
//definisco il sistema operativo su cui il programma verrà compilato
#ifdef __WIN32__
char *os="Win32";
char *clrscr="cls";
#endif
#ifdef __LINUX__
char *os="Linux";
char *clrscr="clear";
#endif
#ifdef __APPLE__
char *os="Mac OS";
char *clrscr="clear";
#endif
//dichiaro i prototipi delle funzioni
void Calcola_triangolo(void);
void Calcola_rettangolo(void);
void Calcola_trapezio(void);
void Calcola_cerchio(void);
//iniziallizzo main()
int main (void) {
//pulisco lo schermo
system(clrscr);
//dichiaro le variabili
int figura=0;
int esci=0;
int c;
//dichiaro il ciclo che permette di ripetere l'operazione fino a quando l'utente non digita '0'
do {
//stampo a schermo uno splash-screen
printf("**************************************************\n");
printf("* GEOMETRIA v1.0 *\n");
printf("* *\n");
printf("* Autore:Glauco Ciullini - g.ciullini@yahoo.it *\n");
printf("**************************************************\n\n");
printf("Versione %s\n\n", os);
//stampo a schermo le opzioni
printf("Scegli le dimensioni da calcolare:\n\n");
printf("1- Area, perimetro e 2° lato di un triangolo isoscele o equilatero introducendone la base e l'altezza\n");
printf("2- Area, perimetro e diagonale di un rettangolo o di un quadrato introducendone le dimensioni dei lati\n");
printf("3- Area, perimetro, 2° e 3° lato di un trapezio isoscele introducendone base minore, base maggiore e altezza\n");
printf("4- Area e perimetro di un cerchio introducendone il raggio\n\n");
printf("0- Esci\n");
//attendo e controllo l'input dell'utente
do {
c = scanf("%d", &figura);
if ((c == 0) || ((figura!=0) && (figura!=1) && (figura!=2) && (figura!=3) && (figura!=4))) {
scanf("%*[^\n]"); printf("Digita un valore numerico compreso tra 0 e 5.\n");
}
} while ((c == 0) || ((figura!=0) && (figura!=1) && (figura!=2) && (figura!=3) && (figura!=4)));
c=0;
//chiamo la funzione appropriata o esco in base alla scelta
switch (figura) {
case 0:
esci=1;
break;
case 1:
Calcola_triangolo();
break;
case 2:
Calcola_rettangolo();
break;
case 3:
Calcola_trapezio();
break;
case 4:
Calcola_cerchio();
break;
}
} while (esci==0);
return (0);
}
//iniziallizzo la funzione Calcola_triangolo
void Calcola_triangolo(void) {
//pulisco lo schermo
system(clrscr);
//iniziallizzo le variabili
double base, altezza;
double perimetro, area, lato;
int continua=1;
int i=1;
int c;
printf("1- Area, perimetro e 2° lato di un triangolo isoscele o equilatero introducendone la base e l'altezza\n\n");
//dichiaro il ciclo che permette di ripetere l'operazione fino a quando l'utente non digita tutti numeri maggiori di 0
do {
//richiedo l'inserimento dei dati, verificando che siano numerici
printf("Inserisci la base:\n");
do {
c = scanf("%lg", &base);
if (c == 0) {
scanf("%*[^\n]"); printf("Digita un valore numerico.\n");
}
} while (c == 0);
printf("Inserisci l'altezza:\n");
do {
c = scanf("%lg", &altezza);
if (c == 0) {
scanf("%*[^\n]"); printf("Digita un valore numerico.\n");
}
} while (c == 0);
//se l'input dell'utente è un numero maggiore di 0 eseguo il calcolo, stampo a schermo e attendo nuovamente un input
if ((base>0) && (altezza>0)) {
lato=sqrt(pow((base/2),2) + pow(altezza,2));
perimetro=base+(lato*2);
area=(base*altezza)/2;
printf("Triangolo di base %g cm e altezza %g cm;\n\n", base, altezza);
printf("Area = %g cm2;\n", area);
printf("Perimetro = %g cm;\n\n", perimetro);
printf("Lato = %g cm;\n\n", lato);
FILE *stream = fopen("save.txt","a");
fprintf(stream, "Triangolo %d, di base %g cm e altezza %g cm;\n\nArea = %g cm2;\nPerimetro = %g cm;\nLato = %g;\n\n", i, base, altezza, area, perimetro, lato);
fflush(stream);
fclose(stream);
i++;
printf("Digita 1 per calcolare di nuovo, 0 per tornare all'inizio.\n");
do {
c = scanf("%d", &continua);
if ((c == 0) || ((continua!=1) && (continua!=0))) {
scanf("%*[^\n]"); printf("Digita un valore numerico compreso tra 0 e 1.\n");
}
} while ((c == 0) || ((continua!=1) && (continua!=0)));
}
//se l'input dell'utente non è maggiore di 0 invito a ridigitare
else {
printf("Inserisci numeri maggiore di 0.\n");
}
} while (continua==1);
//pulisco lo schermo
system(clrscr);
}
//iniziallizzo la funzione Calcola_rettangolo
void Calcola_rettangolo(void) {
//pulisco lo schermo
system(clrscr);
//iniziallizzo le variabili
double lato1, lato2;
double perimetro, area, diagonale;
int continua=1;
int i=1;
int c;
printf("2- Area, perimetro e diagonale di un rettangolo o di un quadrato introducendone le dimensioni dei lati\n\n");
//dichiaro il ciclo che permette di ripetere l'operazione fino a quando l'utente non digita tutti numeri maggiori di 0
do {
//richiedo l'inserimento dei dati, verificando che siano numerici
printf("Inserisci il primo lato:\n");
do {
c = scanf("%lg", &lato1);
if (c == 0) {
scanf("%*[^\n]"); printf("Digita un valore numerico.\n");
}
} while (c == 0);
printf("Inserisci il secondo lato:\n");
do {
c = scanf("%lg", &lato2);
if (c == 0) {
scanf("%*[^\n]"); printf("Digita un valore numerico.\n");
}
} while (c == 0);
//se l'input dell'utente è maggiore di 0 eseguo il calcolo, stampo a schermo e attendo nuovamente un input
if ((lato1>0) && (lato2>0)) {
perimetro=(lato1+lato2)*2;
area=lato1*lato2;
diagonale=sqrt(pow(lato1,2) + pow(lato2,2));
printf("Rettangolo o quadrato di lato %g cm e %g cm;\n\n", lato1, lato2);
printf("Area = %g cm2;\n", area);
printf("Perimetro = %g cm;\n", perimetro);
printf("Diagonale = %g cm;\n\n", diagonale);
FILE *stream = fopen("save.txt","a");
fprintf(stream, "Rettangolo o quadrato %d, di lato 1 %g cm e lato 2 %g cm;\n\nArea = %g cm2;\nPerimetro = %g cm;\nDiagonale = %g;\n\n", i, lato1, lato2, area, perimetro, diagonale);
fflush(stream);
fclose(stream);
i++;
printf("Digita 1 per calcolare di nuovo, 0 per tornare all'inizio.\n");
do {
c = scanf("%d", &continua);
if ((c == 0) || ((continua!=1) && (continua!=0))) {
scanf("%*[^\n]"); printf("Digita un valore numerico compreso tra 0 e 1.\n");
}
} while ((c == 0) || ((continua!=1) && (continua!=0)));
}
//se l'input dell'utente non è maggiore di 0 invito a ridigitare
else {
printf("Inserisci numeri maggiore di 0.\n");
}
} while (continua==1);
//pulisco lo schermo
system(clrscr);
}
//iniziallizzo la funzione Calcola_trapezio
void Calcola_trapezio(void) {
//pulisco lo schermo
system(clrscr);
//iniziallizzo le variabili
double baseMagg, baseMin, altezza, differenza;
double perimetro, area, lato;
int continua=1;
int i=1;
int c;
printf("3- Area, perimetro, 2° e 3° lato di un trapezio isoscele introducendone base minore, base maggiore e altezza\n\n");
//dichiaro il ciclo che permette di ripetere l'operazione fino a quando l'utente non digita tutti numeri maggiori di 0
do {
//richiedo l'inserimento dei dati, verificando che siano numerici
printf("Inserisci la base maggiore:\n");
do {
c = scanf("%lg", &baseMagg);
if (c == 0) {
scanf("%*[^\n]"); printf("Digita un valore numerico.\n");
}
} while (c == 0);
printf("Inserisci la base minore:\n");
do {
c = scanf("%lg", &baseMin);
if (c == 0) {
scanf("%*[^\n]"); printf("Digita un valore numerico.\n");
}
} while (c == 0);
printf("Inserisci l'altezza:\n");
do {
c = scanf("%lg", &altezza);
if (c == 0) {
scanf("%*[^\n]"); printf("Digita un valore numerico.\n");
}
} while (c == 0);
//se l'input dell'utente è maggiore di 0 eseguo il calcolo, stampo a schermo e attendo nuovamente un input
if ((baseMagg>0) && (baseMin>0) && (altezza>0)) {
differenza=baseMagg-baseMin;
lato=(sqrt(pow((differenza/2),2) + pow(altezza,2)));
perimetro=baseMagg+baseMin+(lato*2);
area=((baseMagg+baseMin)*altezza)/2;
printf("Trapezio isoscele di base maggiore %g cm, base minore %g cm e altezza %g cm;\n\n", baseMagg, baseMin, altezza);
printf("Area = %g cm2;\n", area);
printf("Perimetro = %g cm;\n", perimetro);
printf("2° e 3° lato = %g cm;\n\n", lato);
FILE *stream = fopen("save.txt","a");
fprintf(stream, "Trapezio isoscele %d, di base maggiore %g cm, base minore %g cm e altezza %g cm;\n\nArea = %g cm2;\nPerimetro = %g cm;\nLato 2 e 3 = %g;\n\n", i, baseMin, baseMagg, altezza, area, perimetro, lato);
fflush(stream);
fclose(stream);
i++;
printf("Digita 1 per calcolare di nuovo, 0 per tornare all'inizio.\n");
do {
c = scanf("%d", &continua);
if (((c == 0) || (continua!=1) && (continua!=0))) {
scanf("%*[^\n]"); printf("Digita un valore numerico compreso tra 0 e 1.\n");
}
} while ((c == 0) || ((continua!=1) && (continua!=0)));
}
//se l'input dell'utente non è maggiore di 0 invito a ridigitare
else {
printf("Inserisci numeri maggiore di 0.\n");
}
} while (continua==1);
//pulisco lo schermo
system(clrscr);
}
//iniziallizzo la funzione Calcola_cerchio
void Calcola_cerchio(void){
#define pigreco 3.14
//pulisco lo schermo
system(clrscr);
//iniziallizzo le variabili
double raggio;
double perimetro, area;
int continua=1;
int i=1;
int c;
printf("4- Area e perimetro di un cerchio introducendone il raggio\n\n");
//dichiaro il ciclo che permette di ripetere l'operazione fino a quando l'utente non digita tutti numeri maggiori di 0
do {
//richiedo l'inserimento dei dati, verificando che siano numerici
printf("Inserisci il raggio:\n");
do {
c = scanf("%lg", &raggio);
if (c == 0) {
scanf("%*[^\n]"); printf("Digita un valore numerico.\n");
}
} while (c == 0);
//se l'input dell'utente è maggiore di 0 eseguo il calcolo, stampo a schermo e attendo nuovamente un input
if (raggio>0) {
perimetro=raggio*2*pigreco;
area=pow(raggio,2)*pigreco;
printf("Cerchio di raggio %g cm;\n\n", raggio);
printf("Area = %g cm2;\n", area);
printf("Perimetro = %g cm;\n\n", perimetro);
FILE *stream = fopen("save.txt","a");
fprintf(stream, "Cerchio %d, di raggio %g cm;\n\nArea = %g cm2;\nPerimetro = %g cm;\n\n", i, raggio, area, perimetro);
fflush(stream);
fclose(stream);
i++;
printf("Digita 1 per calcolare di nuovo, 0 per tornare all'inizio.\n");
do {
c = scanf("%d", &continua);
if ((c == 0) || ((continua!=1) && (continua!=0))) {
scanf("%*[^\n]"); printf("Digita un valore numerico compreso tra 0 e 1.\n");
}
} while ((c == 0) || ((continua!=1) && (continua!=0)));
}
//se l'input dell'utente non è maggiore di 0 invito a ridigitare
else {
printf("Inserisci numeri maggiore di 0.\n");
}
} while (continua==1);
//pulisco lo schermo
system(clrscr);
}
ho iniziato a studiarmi un po il c e ho iniziato a scrivere un programmino di geometria (piu che altro a scopo mio didattico perchè fa poco :D );
il programma è cosi strutturato: nella main() vengono chiamate le funzioni richieste dall'utente (Calcola_figura), ciascuna delle quali è in grado di produrre un output su file, come nel codice sotto;
il mio problema è che vorrei fare in modo che l'output di ogni funzione venisse scritto in un file "virtuale" (cioè non direttamente su un file di testo) che main() sia sempre in grado di leggere, e che al prompt da parte di main() prima di uscire chieda all''utente se desidera stampare tutto l'output delle singole funzioni in un unico file di testo.
come posso fare? spero di essere stato chiaro :D
riporto sotto il sorgente;
/*Author: Glauco Ciullini*/
//includo le librerie necessarie
#include <stdio.h>
#include <math.h>
//definisco il sistema operativo su cui il programma verrà compilato
#ifdef __WIN32__
char *os="Win32";
char *clrscr="cls";
#endif
#ifdef __LINUX__
char *os="Linux";
char *clrscr="clear";
#endif
#ifdef __APPLE__
char *os="Mac OS";
char *clrscr="clear";
#endif
//dichiaro i prototipi delle funzioni
void Calcola_triangolo(void);
void Calcola_rettangolo(void);
void Calcola_trapezio(void);
void Calcola_cerchio(void);
//iniziallizzo main()
int main (void) {
//pulisco lo schermo
system(clrscr);
//dichiaro le variabili
int figura=0;
int esci=0;
int c;
//dichiaro il ciclo che permette di ripetere l'operazione fino a quando l'utente non digita '0'
do {
//stampo a schermo uno splash-screen
printf("**************************************************\n");
printf("* GEOMETRIA v1.0 *\n");
printf("* *\n");
printf("* Autore:Glauco Ciullini - g.ciullini@yahoo.it *\n");
printf("**************************************************\n\n");
printf("Versione %s\n\n", os);
//stampo a schermo le opzioni
printf("Scegli le dimensioni da calcolare:\n\n");
printf("1- Area, perimetro e 2° lato di un triangolo isoscele o equilatero introducendone la base e l'altezza\n");
printf("2- Area, perimetro e diagonale di un rettangolo o di un quadrato introducendone le dimensioni dei lati\n");
printf("3- Area, perimetro, 2° e 3° lato di un trapezio isoscele introducendone base minore, base maggiore e altezza\n");
printf("4- Area e perimetro di un cerchio introducendone il raggio\n\n");
printf("0- Esci\n");
//attendo e controllo l'input dell'utente
do {
c = scanf("%d", &figura);
if ((c == 0) || ((figura!=0) && (figura!=1) && (figura!=2) && (figura!=3) && (figura!=4))) {
scanf("%*[^\n]"); printf("Digita un valore numerico compreso tra 0 e 5.\n");
}
} while ((c == 0) || ((figura!=0) && (figura!=1) && (figura!=2) && (figura!=3) && (figura!=4)));
c=0;
//chiamo la funzione appropriata o esco in base alla scelta
switch (figura) {
case 0:
esci=1;
break;
case 1:
Calcola_triangolo();
break;
case 2:
Calcola_rettangolo();
break;
case 3:
Calcola_trapezio();
break;
case 4:
Calcola_cerchio();
break;
}
} while (esci==0);
return (0);
}
//iniziallizzo la funzione Calcola_triangolo
void Calcola_triangolo(void) {
//pulisco lo schermo
system(clrscr);
//iniziallizzo le variabili
double base, altezza;
double perimetro, area, lato;
int continua=1;
int i=1;
int c;
printf("1- Area, perimetro e 2° lato di un triangolo isoscele o equilatero introducendone la base e l'altezza\n\n");
//dichiaro il ciclo che permette di ripetere l'operazione fino a quando l'utente non digita tutti numeri maggiori di 0
do {
//richiedo l'inserimento dei dati, verificando che siano numerici
printf("Inserisci la base:\n");
do {
c = scanf("%lg", &base);
if (c == 0) {
scanf("%*[^\n]"); printf("Digita un valore numerico.\n");
}
} while (c == 0);
printf("Inserisci l'altezza:\n");
do {
c = scanf("%lg", &altezza);
if (c == 0) {
scanf("%*[^\n]"); printf("Digita un valore numerico.\n");
}
} while (c == 0);
//se l'input dell'utente è un numero maggiore di 0 eseguo il calcolo, stampo a schermo e attendo nuovamente un input
if ((base>0) && (altezza>0)) {
lato=sqrt(pow((base/2),2) + pow(altezza,2));
perimetro=base+(lato*2);
area=(base*altezza)/2;
printf("Triangolo di base %g cm e altezza %g cm;\n\n", base, altezza);
printf("Area = %g cm2;\n", area);
printf("Perimetro = %g cm;\n\n", perimetro);
printf("Lato = %g cm;\n\n", lato);
FILE *stream = fopen("save.txt","a");
fprintf(stream, "Triangolo %d, di base %g cm e altezza %g cm;\n\nArea = %g cm2;\nPerimetro = %g cm;\nLato = %g;\n\n", i, base, altezza, area, perimetro, lato);
fflush(stream);
fclose(stream);
i++;
printf("Digita 1 per calcolare di nuovo, 0 per tornare all'inizio.\n");
do {
c = scanf("%d", &continua);
if ((c == 0) || ((continua!=1) && (continua!=0))) {
scanf("%*[^\n]"); printf("Digita un valore numerico compreso tra 0 e 1.\n");
}
} while ((c == 0) || ((continua!=1) && (continua!=0)));
}
//se l'input dell'utente non è maggiore di 0 invito a ridigitare
else {
printf("Inserisci numeri maggiore di 0.\n");
}
} while (continua==1);
//pulisco lo schermo
system(clrscr);
}
//iniziallizzo la funzione Calcola_rettangolo
void Calcola_rettangolo(void) {
//pulisco lo schermo
system(clrscr);
//iniziallizzo le variabili
double lato1, lato2;
double perimetro, area, diagonale;
int continua=1;
int i=1;
int c;
printf("2- Area, perimetro e diagonale di un rettangolo o di un quadrato introducendone le dimensioni dei lati\n\n");
//dichiaro il ciclo che permette di ripetere l'operazione fino a quando l'utente non digita tutti numeri maggiori di 0
do {
//richiedo l'inserimento dei dati, verificando che siano numerici
printf("Inserisci il primo lato:\n");
do {
c = scanf("%lg", &lato1);
if (c == 0) {
scanf("%*[^\n]"); printf("Digita un valore numerico.\n");
}
} while (c == 0);
printf("Inserisci il secondo lato:\n");
do {
c = scanf("%lg", &lato2);
if (c == 0) {
scanf("%*[^\n]"); printf("Digita un valore numerico.\n");
}
} while (c == 0);
//se l'input dell'utente è maggiore di 0 eseguo il calcolo, stampo a schermo e attendo nuovamente un input
if ((lato1>0) && (lato2>0)) {
perimetro=(lato1+lato2)*2;
area=lato1*lato2;
diagonale=sqrt(pow(lato1,2) + pow(lato2,2));
printf("Rettangolo o quadrato di lato %g cm e %g cm;\n\n", lato1, lato2);
printf("Area = %g cm2;\n", area);
printf("Perimetro = %g cm;\n", perimetro);
printf("Diagonale = %g cm;\n\n", diagonale);
FILE *stream = fopen("save.txt","a");
fprintf(stream, "Rettangolo o quadrato %d, di lato 1 %g cm e lato 2 %g cm;\n\nArea = %g cm2;\nPerimetro = %g cm;\nDiagonale = %g;\n\n", i, lato1, lato2, area, perimetro, diagonale);
fflush(stream);
fclose(stream);
i++;
printf("Digita 1 per calcolare di nuovo, 0 per tornare all'inizio.\n");
do {
c = scanf("%d", &continua);
if ((c == 0) || ((continua!=1) && (continua!=0))) {
scanf("%*[^\n]"); printf("Digita un valore numerico compreso tra 0 e 1.\n");
}
} while ((c == 0) || ((continua!=1) && (continua!=0)));
}
//se l'input dell'utente non è maggiore di 0 invito a ridigitare
else {
printf("Inserisci numeri maggiore di 0.\n");
}
} while (continua==1);
//pulisco lo schermo
system(clrscr);
}
//iniziallizzo la funzione Calcola_trapezio
void Calcola_trapezio(void) {
//pulisco lo schermo
system(clrscr);
//iniziallizzo le variabili
double baseMagg, baseMin, altezza, differenza;
double perimetro, area, lato;
int continua=1;
int i=1;
int c;
printf("3- Area, perimetro, 2° e 3° lato di un trapezio isoscele introducendone base minore, base maggiore e altezza\n\n");
//dichiaro il ciclo che permette di ripetere l'operazione fino a quando l'utente non digita tutti numeri maggiori di 0
do {
//richiedo l'inserimento dei dati, verificando che siano numerici
printf("Inserisci la base maggiore:\n");
do {
c = scanf("%lg", &baseMagg);
if (c == 0) {
scanf("%*[^\n]"); printf("Digita un valore numerico.\n");
}
} while (c == 0);
printf("Inserisci la base minore:\n");
do {
c = scanf("%lg", &baseMin);
if (c == 0) {
scanf("%*[^\n]"); printf("Digita un valore numerico.\n");
}
} while (c == 0);
printf("Inserisci l'altezza:\n");
do {
c = scanf("%lg", &altezza);
if (c == 0) {
scanf("%*[^\n]"); printf("Digita un valore numerico.\n");
}
} while (c == 0);
//se l'input dell'utente è maggiore di 0 eseguo il calcolo, stampo a schermo e attendo nuovamente un input
if ((baseMagg>0) && (baseMin>0) && (altezza>0)) {
differenza=baseMagg-baseMin;
lato=(sqrt(pow((differenza/2),2) + pow(altezza,2)));
perimetro=baseMagg+baseMin+(lato*2);
area=((baseMagg+baseMin)*altezza)/2;
printf("Trapezio isoscele di base maggiore %g cm, base minore %g cm e altezza %g cm;\n\n", baseMagg, baseMin, altezza);
printf("Area = %g cm2;\n", area);
printf("Perimetro = %g cm;\n", perimetro);
printf("2° e 3° lato = %g cm;\n\n", lato);
FILE *stream = fopen("save.txt","a");
fprintf(stream, "Trapezio isoscele %d, di base maggiore %g cm, base minore %g cm e altezza %g cm;\n\nArea = %g cm2;\nPerimetro = %g cm;\nLato 2 e 3 = %g;\n\n", i, baseMin, baseMagg, altezza, area, perimetro, lato);
fflush(stream);
fclose(stream);
i++;
printf("Digita 1 per calcolare di nuovo, 0 per tornare all'inizio.\n");
do {
c = scanf("%d", &continua);
if (((c == 0) || (continua!=1) && (continua!=0))) {
scanf("%*[^\n]"); printf("Digita un valore numerico compreso tra 0 e 1.\n");
}
} while ((c == 0) || ((continua!=1) && (continua!=0)));
}
//se l'input dell'utente non è maggiore di 0 invito a ridigitare
else {
printf("Inserisci numeri maggiore di 0.\n");
}
} while (continua==1);
//pulisco lo schermo
system(clrscr);
}
//iniziallizzo la funzione Calcola_cerchio
void Calcola_cerchio(void){
#define pigreco 3.14
//pulisco lo schermo
system(clrscr);
//iniziallizzo le variabili
double raggio;
double perimetro, area;
int continua=1;
int i=1;
int c;
printf("4- Area e perimetro di un cerchio introducendone il raggio\n\n");
//dichiaro il ciclo che permette di ripetere l'operazione fino a quando l'utente non digita tutti numeri maggiori di 0
do {
//richiedo l'inserimento dei dati, verificando che siano numerici
printf("Inserisci il raggio:\n");
do {
c = scanf("%lg", &raggio);
if (c == 0) {
scanf("%*[^\n]"); printf("Digita un valore numerico.\n");
}
} while (c == 0);
//se l'input dell'utente è maggiore di 0 eseguo il calcolo, stampo a schermo e attendo nuovamente un input
if (raggio>0) {
perimetro=raggio*2*pigreco;
area=pow(raggio,2)*pigreco;
printf("Cerchio di raggio %g cm;\n\n", raggio);
printf("Area = %g cm2;\n", area);
printf("Perimetro = %g cm;\n\n", perimetro);
FILE *stream = fopen("save.txt","a");
fprintf(stream, "Cerchio %d, di raggio %g cm;\n\nArea = %g cm2;\nPerimetro = %g cm;\n\n", i, raggio, area, perimetro);
fflush(stream);
fclose(stream);
i++;
printf("Digita 1 per calcolare di nuovo, 0 per tornare all'inizio.\n");
do {
c = scanf("%d", &continua);
if ((c == 0) || ((continua!=1) && (continua!=0))) {
scanf("%*[^\n]"); printf("Digita un valore numerico compreso tra 0 e 1.\n");
}
} while ((c == 0) || ((continua!=1) && (continua!=0)));
}
//se l'input dell'utente non è maggiore di 0 invito a ridigitare
else {
printf("Inserisci numeri maggiore di 0.\n");
}
} while (continua==1);
//pulisco lo schermo
system(clrscr);
}