Problem z operatorem " != ".

0

Cześć, od dłuższego czasu męczę się już z operatorem '!=' bo ciągle nie działa tak, jakbym tego chciał, więc robię pewnie jakiś głupi błąd, proszę więc o pomoc.
Napisałem sobie taką małą funkcję

  cout << "Wrzuc pieniadze ( W zlotowkach! ): ";
    do
    {
        cin >> zlotowki;
        if(zlotowki != z1 || zlotowki != z2 || zlotowki != z5)
        {
            cout << "Takich wartosci nie przyjmujemy!";
            break; // to zeby zakonczyl prace programu
        }
        else
        {
        licznik = licznik + zlotowki;
        cout << "Licznik jest rowny: " << licznik << endl;
        }
    }
    while(licznik != wynik && licznik < wynik);

gdzie zmienne globalne są takie (niepotrzebne pominąć, wklejam tutaj wszystkie, wraz z tymi których używam w innych miejscach):

#include <iostream>
using namespace std;
double automat();
//----------------------

int wybor;
double reszta;
double wynik;
double zlotowki;
static double licznik;
//-----zlotowki
const double z1 = 1.00;
const double z2 = 2.00;
const double z5 = 5.00;

No i problem polega na tym, że gdy wpisuje zmienną 'zlotowki' to nie ważne, czy jest to 1, czy 3, czy 7 to i tak ciągle wyskakuje mi "takich wartosci nie przyjmujemy". A przecież chciałem, żeby to wyskakiwało tylko, gdy 'zlotowki' będą różne od 1, 2 lub 5 (

 if(zlotowki != z1 || zlotowki != z2 || zlotowki != z5)

).
Co robię źle? Dodam jeszcze, że instrukcja

while(licznik != wynik && licznik < wynik);

działa tak jak chciałem.

0

Tak się nie porównuje liczb zmiennoprzecinkowych, robi się to tak: fabs(b - a) < epsilon.

0

if(zlotowki != z1 || zlotowki != z2 || zlotowki != z5) warunek nie może być spełniony chyba że z1=z2 i z2=z5
ba być:
if(zlotowki != z1 && zlotowki != z2 && zlotowki != z5)

0

Kurcze.. faktycznie. Dzięki wielkie, to bardzo mi pomoże :) nie tylko w tym programie ale i w przyszłych.. Boże co za błąd :D

1

Język mówiony nie do końca może zgadzać się z regułami logicznymi w programowaniu. Ty powiesz "złotówki będą różne od 1 lub 2 lub 5", ale taki warunek nigdy nie zostanie spełniony, bo gdy złotówki będą wynosić 1 to wciąż będą różne od 2 i 5.
Zamień "lub" na "i".

1 użytkowników online, w tym zalogowanych: 0, gości: 1