Ciao ragazzi. Sono nuovo del forum e ho cominciato da poco a scrivere alcuni semplici programmini
Ne ho completato uno sul calcolo dell'area del triangolo, e siccome devo mostrarlo ad un amico vorrei risolvere alcuni difetti che ho incontrato durante alcune prove. Il più difficile (per me ovvio ) da risolvere è il filtraggio di caratteri alfabetici (es. a, b..) nella finestra di input, in modo da lasciare all'utente la possibilità di inserire solamente numeri e punto (inteso come virgola nei decimali).
Questa è una parte di codice:
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <cmath>
#include <windows.h>
#include <complex>
using namespace std;
int main()
{
cout << " - calcolo dell'area del triangolo -" << endl;
cout << string(2, '\n');
main:
cout << "scegli la formula di calcolo:" << endl;
cout << " a) formula base / altezza -- devi conoscere base e relativa altezza del triangolo" << endl;
cout << " b) formula di Erone -- devi conoscere i tre lati del triangolo" << endl;
cout << " c) formula del seno -- devi conoscere due lati e l'angolo tra essi compreso" << endl;
cout << "" << endl;
cout << "digita la lettera corrispondente alla formula" << endl;
cout << "-- premi e per uscire" << endl;
cout << "" << endl;
int ch;
do
{
ch = _getch();
} while ( ( ch != 'a' ) && ( ch != 'e' ) && ( ch != 'b' ) && ( ch != 'c' ));
if ( ch == 'a' )
{
goto one;
}
else if ( ch == 'b' )
{
goto two;
}
else if ( ch == 'c' )
{
goto three;
}
else
{
goto end;
}
one:
float altezza, base, area;
int a;
cout << "Base = ";
cin >>(base);
if (base <= 0)
{
cout << "anche una sola delle variabili non puo' risultare <= 0" << endl;
goto one;
}
else
{
cout << "Altezza = ";
cin >>(altezza);
if (altezza <= 0)
{
cout << "anche una sola delle variabili non puo' risultare <= 0" << endl;
goto one;
}
else
{
area = altezza * base / 2;
cout.setf(ios_base::fixed, ios_base::floatfield);
cout.precision(3);
if (area < 0.0001)
{
cout << "hai inserito valori troppo bassi per il calcolo" << endl;
goto one;
}
cout << "Area triangolo = ";
cout << "bh/2 = ";
a = printf("%.06g", area);
cout << endl << "-- premi r per riprovare " << endl;
cout << "-- premi b per passare alla formula di Erone " << endl;
cout << "-- premi c per passare alla formula del seno " << endl;
cout << "-- premi e per uscire " << endl;
cout << "" << endl;
do
{
ch = _getch();
} while ( ( ch != 'r' ) && ( ch != 'b' ) && ( ch != 'e' ) && ( ch != 'c' ));
if ( ch == 'r')
{
goto one;
}
else if ( ch == 'e')
{
goto end;
}
else if ( ch == 'c' )
{
goto three;
}
else
{
goto two;
}
}
}
Vorrei che ad esempio alla variabile "base" non fosse permesso l'inserimento di lettere, o che comunque apparisse un messaggio d'errore.
E' possibile? Grazie