Pętla do ... while - kalkulator
Ostatnio zmodyfikowano 2015-04-29 20:15
BartC Temat założony przez niniejszego użytkownika |
Pętla do ... while - kalkulator » 2015-04-29 19:18:29 Męczę się i męczę... Oto kod: #include <iostream> int main() { int liczbaa; int liczbab; char dzialanie; do { std::cout << "Wybierz liczbe A: " << std::endl; std::cin >> liczbaa; std::cout << "Wybierz liczbe B: " << std::endl; std::cin >> liczbab; } while( liczbaa <= 0 && liczbab <= 0 ); do { std::cout << "Co chcesz zrobic? " << std::endl; std::cout << "Mnozenie [1] " << std::endl; std::cout << "Dzielenie [2] " << std::endl; std::cout << "Dodawanie [3] " << std::endl; std::cout << "Odejmowanie [4] " << std::endl; std::cin >> dzialanie; } while( dzialanie == 1 && dzialanie == 2 && dzialanie == 3 && dzialanie == 4 ); switch( dzialanie ) { case 1: std::cout << "Obliczam A * B= " << liczbaa * liczbab << std::endl; break; case 2: std::cout << "Obliczam A / B= " << liczbaa / liczbab << std::endl; break; case 3: std::cout << "Obliczam A + B= " << liczbaa + liczbab << std::endl; break; case 4: std::cout << "Obliczam A - B= " << liczbaa - liczbab << std::endl; break; } std::cout << "koniec" << std::endl; return 0; } Nie działa tak jak powinno, gdyż podaje liczbę a potem b. Następnie wybieram działanie i tutaj nieważne czy dam liczbę od 1 do 4 czy chociażby 78 to i tak nic nie zrobi tylko napisze 'koniec'. |
|
Szustarol |
» 2015-04-29 19:37:44 && to znak and a nie or użyj || ps. kod jak podajesz na stronę to pisz w nawiasach ["code src="C++""]...["/code"] (bez cudzysłowia) @EDIT twój błąd polega na tym, że używająć && (and) każesz kompilatorowi czekać, aż podana liczba będzie równa 1, 2, 3 i 4 NA RAZ używając ||(or) każesz kompilatorowi czekać, aż liczba będzie równa albo 1, albo 2, albo 3 albo 4 taki bonusik dla Ciebie jak to działa przykład: zmienna == 1 and zmienna == 2 and zmienna == 3 kompilator sprawdza to jako jesli zmienna jest rozna od jeden warunek jest nieprawidlowy jesli zmienna jest rowna jeden to czy jest rowna 2? jesli rowna 1 ale nie 2 to warunek nie prawidlowy jesli zmienna jest rowna jeden i dwa to czy jest rowna trzy? itd... dlatego blad ktory popelniles jest taki absurdalny :) @EDIT po raz 4 jak używasz or (||) to musisz dać warunek jako różny od != chyba że użyjesz opcji, którą podał kolega poniżej |
|
carlosmay |
» 2015-04-29 19:40:05 Warunek jest zly, jesli podajesz wybierasz działanie np 1 to nie może być Jednocześnie równe dwa lub 3. Zamień na ( dzialanie < 1 || dzialanie > 4 ) petla będzie się powtarzać az podasz prawidłowa dla switcha |
|
BartC Temat założony przez niniejszego użytkownika |
» 2015-04-29 19:59:48 Dziękuję za odpowiedzi jednak nadal jest tak samo... Zmieniłem tak jak panowie mówili, lecz dalej po wpisaniu nie ważne czy od 1 do 4 czy 183 i tak powtarza do momentu wyboru działania i tak w kółko. |
|
Szustarol |
» 2015-04-29 20:05:16 działanie zamiast char daj int i na początku pętli zeruj pamięć czyli dzialanie = NULL;
pętlę zakończ tak jak powiedział kolega wyżej, to faktycznie lepszy sposób czyli while ( dzialanie > 4 || dzialanie < 1);
|
|
carlosmay |
» 2015-04-29 20:15:54 ( !( dzialanie >= 1 && dzialanie <= 4 ) ) - może ten warunek bedzie czytelniejszy. Można jeszcze czyścić cin.clear(); cin.sync(); cin >> dzialanie; przed każdym wprowadzeniem danych. Unikniesz problemu gdy zostaną jakies bledne dane w buforze wejścia. Jak zmienisz char na int to cin oczekuje liczby. Jesli podasz przypadkiem jakas literę to petla nigdy się nie skończy. |
|
« 1 » |