Porównywanie zmiennych. Źle zwracane wartości.

0

Witajcie kochani! Mam mały problem. Otóż napisałem programik, który pobiera dwie zmienne i je ze sobą porównuje, ale zwraca mi nieprawidłowe wartości (przykładowo: a= 1, b =2. Czy liczba a jest mniejsza od liczby b? Nie). Możecie pomóc? Wszytsko grało, dopóki nie stworzyłem pętli zapobiegającej nie wpisaniu niczego.

 int main()
{
    float a, b;

    do
    {
        cout << "Podaj liczbe a: ";
        Czysc();
        cin >> a;
        if ( a=cin.fail())
            cout << "Blad. Sprobuj ponownie: ";
    }
    while (a=cin.fail());

    do
    {
        cout << "Podaj liczbe b: ";
        Czysc();
        cin >> b;
        if (b=cin.fail())
            cout << "Blad. Sprobuj ponownie: ";
    }
    while (b=cin.fail());


    if ( a == b)
    cout << "Czy liczba a jest rowna liczbie b? " << "Tak" << endl;
    else cout << "Czy liczba a jest rowna liczbie b? " << "Nie" << endl;

    if ( a > b)
    cout << "Czy liczba a jest wieksza od liczby b? " << "Tak" << endl;
    else cout << "Czy liczba a wieksza od liczby b? " << "Nie" << endl;

    if ( a < b)
    cout << "Czy liczba a jest mniejsza od liczby b? " << "Tak" << endl;
    else cout << "Czy liczba a jest mniejsza od liczby b? " << "Nie" << endl;

    if ( a!= b)
    cout << "Czy liczba a jest rozna od b? " << "Tak"<< endl;
    else cout << "Czy liczba a jest rozna od b?  " << "Nie" << endl;
    return 0;
}
2

o_O
if ( a=cin.fail()) To jest mega WTF. Raz że robisz tu PRZYPISANIE a dwa że stan błędu strumienia jest zapisany w samym strumieniu a nie w zmiennej do której chciałeś pisać. Sprawdzasz po prostu if(cin.fail()) i tyle jeśli już.

0

Dzięki! Zrobiłem to tak i działa :D

int main()
{
    float a, b;

    do
    {
        cout << "Podaj liczbe a: ";
        Czysc();
        cin >> a;
        if ( cin.fail())
            cout << "Blad. Sprobuj ponownie: ";
    }
    while (cin.fail());

    do
    {
        cout << "Podaj liczbe b: ";
        Czysc();
        cin >> b;
        if (cin.fail())
            cout << "Blad. Sprobuj ponownie: ";
    }
    while (cin.fail());


    if ( a == b)
    cout << "Czy liczba a jest rowna liczbie b? " << "Tak" << endl;
    else cout << "Czy liczba a jest rowna liczbie b? " << "Nie" << endl;

    if ( a > b)
    cout << "Czy liczba a jest wieksza od liczby b? " << "Tak" << endl;
    else cout << "Czy liczba a wieksza od liczby b? " << "Nie" << endl;

    if ( a < b)
    cout << "Czy liczba a jest mniejsza od liczby b? " << "Tak" << endl;
    else cout << "Czy liczba a jest mniejsza od liczby b? " << "Nie" << endl;

    if ( a!= b)
    cout << "Czy liczba a jest rozna od b? " << "Tak"<< endl;
    else cout << "Czy liczba a jest rozna od b?  " << "Nie" << endl;
    return 0;
} 
0
#include <iostream>
#include <string>
#include <limits>
using namespace std;

template<typename T>
inline T pretty_safe_read(const string &msg = "Give:", const string &error_msg = "Error;"){
	T var;
	for(;;){
		cout << msg;
		cin >> var;
		if(!cin.fail())
			return var;
		cout << error_msg;
		cin.ignore(numeric_limits<streamsize>::max(), '\n');
		cin.clear();
	}
}

int main(){
	float a = pretty_safe_read<float>(), b = pretty_safe_read<float>();
	cout.setf(ios::boolalpha);
	cout << "a eq b? " << (a==b) << endl;
	cout << "a > b? " << (a>b) << endl;
	cout << "a < b? " << (a<b) << endl;
	cout << "a != b? " << (a!=b) << endl;
	return 0;
}

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