Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Pętla do ... while - kalkulator

Ostatnio zmodyfikowano 2015-04-29 20:15
Autor Wiadomość
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:
C/C++
#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'.
P-131625
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
P-131626
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
P-131627
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.
P-131632
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);
P-131633
carlosmay
» 2015-04-29 20:15:54
( !( dzialanie >= 1 && dzialanie <= 4 ) )
 - może ten warunek bedzie czytelniejszy.
Można jeszcze czyścić
C/C++
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.
P-131635
« 1 »
  Strona 1 z 1