Rozdział 15 - zadanie
Ostatnio zmodyfikowano 2015-09-12 13:08
Flozze Temat założony przez niniejszego użytkownika |
Rozdział 15 - zadanie » 2015-09-11 12:38:32 Witam, Proszę bardzo o pomoc ponieważ nie wiem jak rozwiązać problem... 1. #include <iostream> #include <cstdlib> using namespace std;
int main() { cout << "...:::||| Kalkulator |||:::..." << endl; cout << " [1] Licz, [2] Zamknij" << endl; int wybor; float a, b; char znak; do { cin >> wybor; if( wybor == 1 ) { system( "cls" ); cout << "...:::||| Licz ||:::..." << endl; do { cin >> a; cin >> znak; cin >> b; switch( znak ) { case '+': { system( "cls" ); cout << a << znak << b << " = " << a + b; break; } case '-': { system( "cls" ); cout << a << znak << b << " = " << a - b; break; } case '/': { system( "cls" ); cout << a << znak << b << " = " << a / b; break; } case '*': { system( "cls" ); cout << a << znak << b << " = " << a * b; break; } default: cout << "Bledne dzialanie!" << endl; break; } } while( znak != '+' || znak != '-' || znak != '/' || znak != '*' ); cout << "Koniec."; return 0; } else if( wybor == 2 ) return 0; else cout << "Podaj wlasciwa cyfre wyboru!" << endl; } while( wybor != 1 || wybor != 2 ); return 0; }
Tak wygląda mój program. Problem polega na tym, że nie kończy się pętla po wprowadzeniu znaku +,-,/ lub *. Z tego co ja tu widzę to powinno działać, więc muszę się poradzić osób mądrzejszych ;) chodzi o ten fragment: } while( znak != '+' || znak != '-' || znak != '/' || znak != '*' );
2. I jeszcze jedna sprawa. Jeśli w pierwszej petli w instrukcji wyboru wprowadze złą cyfrę to pętla wykonuje się od nowa, i wprowadzam zmienna jeszcze raz, a w tym samym przypadku jeśli wprowadzę inny typ zmiennej ( np. litere ) to pętla wykonuje się w kółko a "cin" jest pomijany. Jak temu zaradzić? Chodzi o ten przykład: do { cin >> wybor; if( wybor == 1 ) { ... } else if( wybor == 2 ) return 0; else cout << "Podaj wlasciwa cyfre wyboru!" << endl; } while( wybor != 1 || wybor != 2 );
return 0;
Mam nadzieję, że przekazałem problemy wystarczająco zrozumiale. Pozdrawiam. |
|
carlosmay |
» 2015-09-11 14:12:47 Z tego co ja tu widzę to powinno działać |
Nie powinno. Pomyśl, jak podasz '+' to znak != '-' jest prawdą itd. jeśli wprowadzę inny typ zmiennej ( np. litere ) to pętla wykonuje się w kółko a "cin" jest pomijany. Jak temu zaradzić? |
Kontrola strumienia, czyszczenie strumienia. Jak podasz niewłaściwy typ to nie zostanie on wczytany i zostanie w buforze póki go nie wyczyścisz. (zapętlenie) Metody: std::cin.clear(); std::cin.sync();
|
|
kmlkamilek |
» 2015-09-11 14:49:32 |
|
Flozze Temat założony przez niniejszego użytkownika |
» 2015-09-11 23:04:37 Racja, ze warunek z '-' bedzie prawda tylko mialem bledne przekonanie ze jesli jeden warunek bedzie falszem to wynik bedzie falszem... Dzieki bardzo za pomoc. |
|
carlosmay |
» 2015-09-12 10:13:06 jesli jeden warunek bedzie falszem to wynik bedzie falszem |
tak jest w przypadku operatora &&. |
|
Flozze Temat założony przez niniejszego użytkownika |
» 2015-09-12 13:08:45 Tak, już po twoim pierwszym poscie do tego doszedlem ;) Wielkie dzięki za pomoc. Zamykam |
|
« 1 » |