[help] Kalkulator w c++, po zakończeniu pętli powrót do głównej funkcji main.
Ostatnio zmodyfikowano 2022-03-22 18:51
| XdekHaker Temat założony przez niniejszego użytkownika | [help] Kalkulator w c++, po zakończeniu pętli powrót do głównej funkcji main. » 2022-03-22 18:14:27 Witam. Stworzyłem prosty kalkulator w c++. Gdy wpisuję znak alfabetu zamiast liczby mój algorytm się zapętlał, rozwiązałem to przy użyciu dodania "break;". Jednak teraz chcę aby po wpisaniu błędnego znaku (innego niż liczba) po prostu cofał się na sam początek funkcji main(). Próbowałem użyć etykiet (występował loop) i "main();" jednak bez skutku. Ktoś mi wytłumaczy gdzie leży problem i jak mogę skoczyć z tego miejsca (gdy wpiszę błędną wartość) na początek funkcji main() bez ciągłego zapętlania programu (o ile to w ogóle możliwe)? Miejsce w którym chcę wykonać skok na początek zaznaczyłem strzałką w komentarzu, w kodzie. Kod: #include <iostream>#include <cmath>
 using namespace std;
 
 
 float mnoz( float x, float y )
 {
 return x * y;
 }
 float dodaj( float x, float y )
 {
 return x + y;
 }
 float odej( float x, float y )
 {
 return x - y;
 }
 float potega( float x, float y )
 {
 return pow( x, y );
 }
 float dziel( float x, float y )
 {
 return x / y;
 }
 
 
 
 int main()
 {
 string tekst = "\n*************************\n";
 for(;; )
 {
 int wybor;
 float x, y;
 
 cout << "Podaj pierwszą liczbę: " << endl; cin >> x;
 cout << "Podaj drugą liczbę: " << endl; cin >> y;
 
 cout << tekst;
 cout << "\nChcesz pomnożyć (1), podzielić (2), dodać (3), odjać (4), Potęgować(5) czy Zamknąć(6)?\n" << endl;
 cin >> wybor;
 cout << "\n";
 
 switch( wybor )
 {
 case 1:
 cout << "Wynik mnożenia wynosi: " << mnoz( x, y ) << tekst << endl;
 break;
 
 case 2:
 if( y == 0 )
 {
 cout << "Nie można dzielić przez 0." << tekst << endl;
 }
 else
 {
 cout << "Wynik dzielnie wynosi: " << dziel( x, y ) << tekst << endl;
 }
 break;
 
 case 3:
 cout << "Wynik dodawania wynosi: " << dodaj( x, y ) << tekst << endl;
 break;
 
 case 4:
 cout << "Wynik odejmowania wynosi: " << odej( x, y ) << tekst << endl;
 break;
 
 case 5:
 cout << "Wynik potęgowania wynosi: " << potega( x, y ) << tekst << endl;
 break;
 
 case 6:
 return 0;
 break;
 
 default:
 cout << "Brak wyboru" << tekst << endl;
 
 break;
 }
 cout << "wprowadzono złą wartość" << endl;
 break; }
 return 0;
 }
 | 
|  | 
| pekfos | » 2022-03-22 18:51:06 Zapętlanie się wynika z braku obsługi błędów. Zapoznaj się z punktem "Czyszczenie zawartości strumienia wejściowego" w Obsługa strumienia wejściowego . | 
|  | 
| « 1 » |