Witam, napisałem swój pierwszy program w C++.
Program liczy np. rozwiązania funkcji kwadratowej. Napisałem instrukcję, która sprawdza czy wprowadzane współczynniki funkcji kwadratowej są liczbami, a jeżeli nie to wyrzuca informację: " Blad w danych wejsciowych. Dzialanie aplikacji przerwane".
Problem polega na tym, że chciałbym, żeby po wyświetleniu tej informacji program się nie zamykał, a pozostawiał wyświetlaną informację w oknie.(Chodzi mi odpalenie z pliku .exe, nie w kompilatorze). Póki co program pozostaje otwarty tylko po poprawnym wprowadzeniu danych, a np. kiedy zamiast współczynnika "a", który powinien być liczbą wprowadzimy literę to od razu się zamyka.
Jak temu zaradzić?
Nie mam zamiaru programować więcej w C++, jest to program, który muszę napisać na zaliczenie, więc proszę o możliwie klarowną odpowiedź co gdzie wstawić.
Z góry dziękuję :)
#include <iostream>
#include <math.h>
#include <windows.h> // Biblioteka dodana do obslugi kolorow
#include <cstdlib> //Sprawdzenie poprawnosci danych
using namespace std;
string WYBOR;
int a,b,c = 0;
int delta(int a, int b,int c)
{return b*b-4*a*c;}
float e(int a,int b)
{return ((-b)/(2*a));}
float pierwX1(int a, int b, int delta)
{return (-b+sqrt(delta))/(2*a);}
float pierwX2(int a, int b, int delta)
{return (-b-sqrt(delta))/(2*a);}
int xliniowe(int c, int b)
{return -c/b;}
int main()
{
cout <<"1. Jezeli chcesz znalezc rozwiazanie rownania kwadratowego nacisnij (1)" << endl;
cout <<"2. Jezeli chcesz obliczyc sume ciagu arytmetycznego nacisnij (2)"<< endl;
cin >> WYBOR;
if(WYBOR=="1")
{
cout<<"ROWNANIE KWADRATOWE:";
cout<<"Postac ogolna rownania kwadratowego:";
HANDLE hOut;
hOut = GetStdHandle( STD_OUTPUT_HANDLE );
SetConsoleTextAttribute( hOut, FOREGROUND_GREEN);
cout <<endl<< "f(x)=a*x^2+b*x+c=0 \n" << flush << endl << endl;
SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED );
int a,b,c,d;
cout<<"Podaj a: ";
cin>>a;
if (cin.fail())
{
cerr << "Blad w danych wejsciowych. Dzialanie aplikacji przerwane\n";
return EXIT_FAILURE;
}
cout << "Pobrano liczbe " << a << '\n';
cout<<endl<<"Podaj b: ";
cin>>b;
if (cin.fail())
{
cerr << "Blad w danych wejsciowych. Dzialanie aplikacji przerwane\n";
return EXIT_FAILURE;
}
cout << "Pobrano liczbe " << b << '\n';
cout<<endl<<"Podaj c: ";
cin>>c;
if (cin.fail())
{
cerr << "Blad w danych wejsciowych. Dzialanie aplikacji przerwane\n";
return EXIT_FAILURE;
}
cout << "Pobrano liczbe " << c << '\n';
if (delta(a,b,c)<0)
{cout<<endl<<"Rownanie nie ma rozwiazan(nie posiada miejsc zerowych). \n";}
else if (delta(a,b,c)==0)
{cout<<endl<<"Jest tylko jedno miejsce zerowe:\n x="<<e(a,b);
cout<<"\n";}
else if (delta(a,b,c)>0)
{cout<<endl<<"Funcja posiada dwa miejsca zerowe: \n"<<endl<<"x1="<<pierwX1(a,b,delta(a,b,c));
cout<<"\n"<<"x2="<<pierwX2(a,b,delta(a,b,c));
cout<<"\n";}
if (a==0)
{
cout<<"X jest rowne:"<<xliniowe(c,b);
cout<<"\n";}
else
{
d=delta(a,b,c);
SetConsoleTextAttribute( hOut, FOREGROUND_RED);
cout<<endl<<"Delta rownania wynosi:"<<d;
SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED );
cout<<"\n";
}
}
if(WYBOR=="2")
{
int n;
HANDLE hOut;
hOut = GetStdHandle( STD_OUTPUT_HANDLE );
float a1,an,suma=0;
cout<<"SUMA WYRAZOW CIAGU ARYTMETYCZNEGO";
SetConsoleTextAttribute( hOut, FOREGROUND_GREEN);
cout<<endl<<"Wzor ogolny na sume 'n' poczatkowych wyrazow: Sn=(a1+an)/2*n";
SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED );
cout<<endl<<"\Podaj wartosc n (liczba wyrazow poczatkowych) = ";
cin>>n;
if (cin.fail())
{
cerr << "Blad w danych wejsciowych. Dzialanie aplikacji przerwane\n";
return EXIT_FAILURE;
}
cout << "Pobrano liczbe" << n << '\n';
cout<<endl<<"Podaj wartosc pierwszego wyrazu ciagu (a1): ";
cin>>a1;
if (cin.fail())
{
cerr << "Blad w danych wejsciowych. Dzialanie aplikacji przerwane\n";
return EXIT_FAILURE;
}
cout << "Pobrano liczbe " << a1 << '\n';
cout<<endl<<"Podaj wartosc " <<n<<" wyrazu ciagu (an): ";
cin>>an;
if (cin.fail())
{
cerr << "Blad w danych wejsciowych. Dzialanie aplikacji przerwane\n";
return EXIT_FAILURE;
}
cout << "Pobrano liczbe " << an << '\n';
cout<<"\n\n";
suma=(a1+an)*n/2;
SetConsoleTextAttribute( hOut, FOREGROUND_RED);
cout<<endl<<"Suma kolejnych "<< n<<" wyrazow ciagu arytmetycznego wynosi: "<<suma;
SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED );
cin.ignore();
}
cin.sync(); //Zatrzymuje zamykanie sie programu
cin.get();
return 0;
}