[C++] Lekcja 15 Zadanie domowe KALKULATOR
Ostatnio zmodyfikowano 2014-08-16 17:21
carlosmay Temat założony przez niniejszego użytkownika |
[C++] Lekcja 15 Zadanie domowe KALKULATOR » 2014-08-15 23:09:01 Wyczytalem w Gręboszu o fonkcji goto i tak mi została, że nie mogę nic innego wymyśleć. Jak mozna goto zastąpic? Jest w case 5: żeby wyskoczyc na koniec programu (realizuje rezygnuj). #include <iostream> #include <cstdio> using namespace std;
int main() { float liczba; float wynik = 10; do { cout << "wynik = " << wynik << endl; cout << "Wprowadz liczbe: "; cin >> liczba; int x; if( liczba != 0 ) { cout << "\nDostepne opcje:\n\n [1] dodawanie\n [2] odejmowanie\n"; cout << " [3] mnozenie\n [4] dzielenie\n [5] rezygnuj\n\n"; if( liczba != 0 ) { cout << "Wybierz dzielanie:\n"; cin >> x; switch( x ) { case 1: cout << wynik << " + " << liczba << " = " << wynik + liczba << endl; break; case 2: cout << wynik << " - " << liczba << " = " << wynik - liczba << endl; break; case 3: cout << wynik << " * " << liczba << " = " << wynik * liczba << endl; break; case 4: cout << wynik << " / " << liczba << " = " << wynik / liczba << endl; break; case 5: goto konczymy; default: cout << "Wprowadz poprawne oznacznie działania\n"; break; } } } } while( liczba != 0 ); cout << "Podales liczbe 0.\n\n"; konczymy: cout << "Konczymy\n\n"; system( "pause" ); return 0; } |
|
1aam2am1 |
» 2014-08-15 23:13:06 0 to koniec 5 jest niepotrzebne
|
|
carlosmay Temat założony przez niniejszego użytkownika |
» 2014-08-15 23:24:35 Trymałem się zamysłu autora, stąd ta 5-tka. wiem, że goto nie jest wskazane w użyciu, więc powstał temat. |
|
1aam2am1 |
» 2014-08-15 23:46:57 powiem tak przeanalizuj program wychodzi dla zero to wpisz tam pięć i usuń instrukcjie goto to beędzie rezygnacja |
|
Jacob99 |
» 2014-08-16 11:25:50 Zamiast goto napisz break; . Btw. Grębosz w Symfonii C++ Standard odradza używania goto . |
|
kubek3898 |
» 2014-08-16 14:12:57 @up Może się mylę, ale wydaje mi się, że samo break nie spowoduje opiszczenia pętli. Ja zrobiłbym to tak: bool koniec = false;
do { case 5: koniec = true; break; } while( liczba != 0 && !koniec )
if( koniec ) { cout << "Zrezygnowales"; } else { cout << "Wcisnales 0"; }
@edit x2 I zastanawia mnie jeszcze po co autor tematu umieścił dwa razy taki sam warunek if, zaraz jeden po drugim. @edit x3 Kolejnym rozwiązaniem może być rzucenie wyjątku ;) |
|
carlosmay Temat założony przez niniejszego użytkownika |
» 2014-08-16 16:46:56 #include <iostream> #include <cstdio> using namespace std;
int main() { float liczba; float wynik = 10; bool koniec; do { cin.clear(); cin.sync(); cout << "wynik = " << wynik << endl; cout << "Wprowadz liczbe: "; cin >> liczba; int x; if( liczba != 0 & cin.good() ) { cout << "\nDostepne opcje:\n\n [1] dodawanie\n [2] odejmowanie\n"; cout << " [3] mnozenie\n [4] dzielenie\n [5] rezygnuj\n\n"; cout << "Wybierz dzialanie:\n"; cin >> x; if( x >= 1 || x <= 5 ) { switch( x ) { case 1: cout << "Dodawanie\n" << wynik << " + " << liczba << " = " << wynik + liczba << endl << endl; break; case 2: cout << "Odejmowanie\n" << wynik << " - " << liczba << " = " << wynik - liczba << endl << endl; break; case 3: cout << "Monzenie\n" << wynik << " * " << liczba << " = " << wynik * liczba << endl << endl; break; case 4: cout << "Dzielenie\n" << wynik << " / " << liczba << " = " << wynik / liczba << endl << endl; break; case 5: koniec = true; break; } } } else cout << "Dane wejsciowe nieprawidlowe!\n\n"; } while( liczba != 0 & !koniec ); if( koniec ) cout << "Rezygancja.\n\n"; else cout << "Podales liczbe 0.\n\n"; cout << "Konczymy\n\n"; system( "pause" ); return 0; } Run-Time Check Failure #3 - The variable 'koniec' is being used without being initialized.
Run-Time Check Failure #3 - The variable 'koniec' is being used without being initialized. Zamiana 0 na 5 nie powoduje wyjścia z pętli. Break zamiast goto także. kubek3898: najciekawsza podpowiedź. W Code::Blocks działa bez zarzutów, jednak w Visual C++ wykrzykuje jak w logu. Kompiluje się, ale zawsze z ostrzeżeniem. |
|
kubek3898 |
» 2014-08-16 16:49:51 Spróbuj przy definicji zmiennej ją również zainicjalizować: @edit Masz zły operator: } while( liczba != 0 & !koniec ); nie masz używać operatora sumy bitowej '&' tylko operatora koniunkcji '&&' |
|
« 1 » 2 |