Программа продолжает работать бесконечно, выводя очень большие числа
У меня есть код, который должен выводить 2 разных числа, а после этого выводить 3 разных числа в 3 столбцах по 50 строк, в последнем операторе else. Однако выход просто посылает одно действительно длинное число, выводит заголовок для каждого столбца, но либо никакого числа, либо ноль под ним, непрерывно.
#include <iomanip> #include <math.h> #include <iostream> using namespace std; const double g_m=32.0; double thetaDegrees, sph; double sec=0.0, t; double x, y, z=0.0; double range(double sph, double g_m, double thetaDegrees) { return (pow(sph,2.0))/g_m*sin(2*thetaDegrees); } double timer(double range, double thetaDegrees, double sph) { return range/sph*cos(thetaDegrees); } double distance(double sph, double sec, double thetaDegrees) { return sph*sec*cos(thetaDegrees); } double height(double sph, double thetaDegrees, double sec, double z) { return ((sph*sec*sin(thetaDegrees))-(1.0/2.0*pow(sec,2.0))+z); } int main() { int choice; bool shapes = true; while (shapes != false){ cout << " Choose one \n "; cout << " 1 KPH.\n"; cout << " 2 MPH.\n"; cin >> choice; switch (choice) { case 1: { cout << "You chose KPH \n"; cout << "Enter angle(degrees) and velocity(kph) \n"; cin >> thetaDegrees >> sph; if ( sph==0 ) { cin.clear(); cin.ignore(512, '\n'); cout<< "Bad data \n"; } else { if(thetaDegrees<0.0) { cerr<<"degrees< error! \n"; } else { if(thetaDegrees>90) { cerr<<"degrees< error! \n"; } else { double myRange = range(sph, g_m, thetaDegrees); cout<<fixed; cout << setprecision(3); cout<< myRange<<"feet(Range)\n"; //R value is sent to screen cout<<fixed; cout << setprecision(3); cout<< timer(myRange, thetaDegrees, sph)<<"secs in air\n"; while(sec<=timer(myRange, thetaDegrees, sph)) { double sec = sec+ (timer(myRange, thetaDegrees, sph)/50.0); cout<<fixed; cout<<setprecision(3); cout<<left<<setw(25)<<"Total Flight Time(secs)"; cout<<left<<setw(25)<<"Horizontal Distance(ft)"; cout<<left<<setw(25)<<"Height(ft)"; cout<< "\n"<<endl; cout<<left<<setw(25)<<sec; cout<<left<<setw(25)<<x; cout<<left<<setw(25)<<y; cout<< "\n"<<endl; } } } } } break; case 2: { cout << "You chose MPH \n"; cout << "Enter angle(degrees) and velocity(mph) \n"; cin >> thetaDegrees >> sph; if ( sph==0 ) { cin.clear(); cin.ignore(512, '\n'); cout<< "bad data \n"; } else { if(thetaDegrees<0.0) { cerr<<"degrees< error! \n"; } else { if(thetaDegrees>90) { cerr<<"degrees< error! \n"; } else { double myRange=range(sph, g_m, thetaDegrees); cout<<myRange<<"feet(Range)\n"; cout<<timer(myRange, thetaDegrees, sph)<<"secs in air\n"; while(sec<=timer(myRange, thetaDegrees, sph)) { double sec = sec+ (timer(myRange, thetaDegrees, sph)/50.0); cout<<fixed; cout<<setprecision(3); cout<<left<<setw(25)<<"Total Flight Time(secs)"; cout<<left<<setw(25)<<"Horizontal Distance(ft)"; cout<<left<<setw(25)<<"Height(ft)"; cout<< "\n"<<endl; cout<<left<<setw(25)<<sec; cout<<left<<setw(25)<<x; cout<<left<<setw(25)<<y; cout<< "\n"<<endl; } } } } } break; case 3: { cout << "End \n"; shapes = false; } break; } } return 0; }
Что я уже пробовал:
Я попробовал удалить и добавить заданную точность, и исправил. Я также попытался проверить, есть ли что-нибудь, что могло бы вызвать бесконечный цикл, но я не мог этого увидеть.