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

Zadanie z końca pozomu 1

Ostatnio zmodyfikowano 2014-12-17 23:18
Autor Wiadomość
piotrlajewski
Temat założony przez niniejszego użytkownika
Zadanie z końca pozomu 1
» 2014-12-16 23:35:26
Witam serdecznie i bardzo proszę o pomoc w sprawdzeniu kodu.
Wydawało mi się, że jeżeli if(a1) nie jest spełniony, winno wypisaćz else np. " Nie podales liczby calkowitej " - a tak nie jest.
Dziekuję za pomoc.

C/C++
#include <iostream>
int main()
{
    int a;
    float b;
    bool a1 = a;
    a = std::cin.good();
    bool b1 = b;
    a = std::cin.good();
    b = std::cin.good();
    std::cout << "Podaj liczbe calkowita: ";
    std::cin >> a;
    std::cout << "Czy udalo sie wczytac? " << std::cin.good() << std::endl;
    std::cout << "Czy cos nawalilo? " << std::cin.fail() << std::endl;
    std::cin.clear();
    std::cin.sync();
    std::cout << "Podaj liczbe rzeczywista: ";
    std::cin >> b;
    std::cout << "Czy udalo sie wczytac? " << std::cin.good() << std::endl;
    std::cout << "Czy cos nawalilo? " << std::cin.fail() << std::endl;
    std::cin.clear();
    std::cin.sync();
    if( a1 )
    {
        std::cout << "Podana liczba calkowita to: " << a;
        std::cout << " wczytano = " << a1 << std::endl;
    }
    else
         std::cout << " Nie podales liczby calkowitej ";
   
    if( b1 )
    { std::cout << "Podana liczba rzeczywista to: " << b;
       
        std::cout << "Nie podales liczby rzeczywistej " << std::endl;
    }
    else
         std::cout << " wczytano = 0 ";
   
    return 0;
}
P-122976
wilkoo13
» 2014-12-17 04:02:18
Co to ma być??
 int a;
    float b;
    bool a1 = a;
    a = std::cin.good();
    bool b1 = b;
    a = std::cin.good();
    b = std::cin.good();Przypisujesz zmiennej a1 prawdę ponieważ zmienna a ma juz w sobie wartość która jest śmieciem. Potem przypisujesz zmiennej a wartość hmmm nie wiem jak to działa, ale jeszcze nic nie wprowadziłeś a już sprawdzasz czy zrobiłeś to dobrze, a raczej nie sprawdzam tylko od razu przypisujesz prawdę. do zmiennej b1 przypisujesz prawdę bo b ma śmieci, ma jakąś wartość już w sobie.

     std::cout << "Czy udalo sie wczytac? " << std::cin.good() << std::endl; Każesz pokazać Czy udalo sie wczytac? 1 ponieważ cin.good() zawsze równa się jeden. heh

 std::cout << "Czy cos nawalilo? " << std::cin.fail() << std::endl;Tak samo, każesz po napisie Czy cos nawalilo? wydrykować 0.

Tak samo niżej.

 if( a1 )
    {
        std::cout << "Podana liczba calkowita to: " << a;
        std::cout << " wczytano = " << a1 << std::endl;
    }Jeśli a1 ma prawdę, a ma, bo na samym początku tak ustawiłeś. Jeśli ma to pokaż wartość a, a potem pokaz tekst oraz 1.
P-122982
piotrlajewski
Temat założony przez niniejszego użytkownika
» 2014-12-17 13:27:13
Racja, namieszałem. Dzięki. W takim razie jeżeli
C/C++
int a;
bool a1 = std::cin.good();
A dalej:
C/C++
std::cin >> a;
std::cout << "Czy udalo sie wczytac? " << std::cin.good() << std::endl;
std::cout << "Czy cos nawalilo? " << std::cin.fail() << std::endl;
a na koniec:
C/C++
if( a1 )
{
    std::cout << "Podana liczba calkowita to: " << a;
    std::cout << " wczytano = " << a1 << std::endl;
}
else
     std::cout << " Nie podales liczby calkowitej ";
to nie wyświetla i tak " Nie podales liczby calkowitej " jeżeli wprowadzimy np. "u".
Z kursu zrozumiałem, że bool jest jakby zmienną (true/false), której możemy przypisać std::cin.good/std::cin.fail i odnieść się do jej wartości (u mnie w kodzie "a1") w "if".
P-122994
wilkoo13
» 2014-12-17 13:46:20
Pokaż jak wygląda twój poprawiony kod (cały).
P-122995
piotrlajewski
Temat założony przez niniejszego użytkownika
» 2014-12-17 13:48:56
A, cholera. Czyli wartość a1 warunkową wprowadzamy dopiero w "if", prawda? Po przeróbce wygląda to tak, wygląda na to że działa. Jeśli zrobiłem to wystarczająco prawidłowo, to proszę o zamknięcie tematu i dziękuję za pomoc. Pozdrawiam!
C/C++
#include <iostream>
int main()
{
    int a;
    float b;
    bool a1 = std::cin.good();
    bool b1 = std::cin.good();
    std::cout << "Podaj liczbe calkowita: ";
    std::cin >> a;
    std::cout << "Czy udalo sie wczytac? " << std::cin.good() << std::endl;
    std::cout << "Czy cos nawalilo? " << std::cin.fail() << std::endl;
    std::cin.clear();
    std::cin.sync();
    std::cout << "Podaj liczbe rzeczywista: ";
    std::cin >> b;
    std::cout << "Czy udalo sie wczytac? " << std::cin.good() << std::endl;
    std::cout << "Czy cos nawalilo? " << std::cin.fail() << std::endl;
    std::cin.clear();
    std::cin.sync();
   
    if( a1 = a )
    {
        std::cout << "Podana liczba calkowita to: " << a;
        std::cout << " wczytano = " << a1 << std::endl;
    }
   
    else
         std::cout << " Nie podales liczby calkowitej ";
   
    std::cout << "Podana liczba rzeczywista to: " << b;
    if( b1 = b )
    {
        std::cout << " wczytano = " << a1 << std::endl;
    }
   
    else
         std::cout << " Nie podales liczby rzeczywistej ";
   
    return 0;
}
P-122996
wilkoo13
» 2014-12-17 14:39:24
Powtórz kurs ponieważ nadal robisz źle.

Zmiennej a1 przypisujesz wartość a. Jeśli a jest niezerowe w tedy wyrażenie zwraca true
C/C++
if( a1 = a )
{
    std::cout << "Podana liczba calkowita to: " << a;
    std::cout << " wczytano = " << a1 << std::endl;
}

tak samo niżej z b1 i b

cin.good() ma zawsze jeden, chyba że źle wprowadziłeś dane, w tedy przyjmuje wartość zero
cin.fail() ma zawsze zero, chyba że źle wprowadziłeś dane, w tedy przyjmuje wartość jeden


jeśli na początku napiszesz że zmienna bool a1 przyjmuje wartość cin.good() lub false to tylko w tym momencie wartość zostanie jej przypisana, ona nie zmienia się automatycznie w zaleznosci czy dobrze wprowadziles czy źle,
P-123000
piotrlajewski
Temat założony przez niniejszego użytkownika
» 2014-12-17 15:24:15
Przeczytałem uważnie Twoją odpowiedź, przemyślałem, wróciłem do lekcji. Dzięki za pomoc. Jeżeli dalej jest źle, to wróce, gdy się douczę.
Przeredagowany kod:

C/C++
#include <iostream>
int main()
{
    int a;
    float b;
    /*bool a1 = std::cin.good();
        bool b1 = std::cin.good();*/
    std::cout << "Podaj liczbe calkowita: ";
    std::cin >> a;
    std::cout << "Czy udalo sie wczytac? " << std::cin.good() << std::endl;
    std::cout << "Czy cos nawalilo? " << std::cin.fail() << std::endl;
    std::cin.clear();
    std::cin.sync();
    std::cout << "Podaj liczbe rzeczywista: ";
    std::cin >> b;
    std::cout << "Czy udalo sie wczytac? " << std::cin.good() << std::endl;
    std::cout << "Czy cos nawalilo? " << std::cin.fail() << std::endl;
    std::cin.clear();
    std::cin.sync();
    bool a1 = std::cin.good();
    if( a1 = a )
   
    {
        std::cout << "Podana liczba calkowita to: " << a << std::endl;
    }
   
    else
    std::cout << " Nie podales liczby calkowitej " << std::endl;;
   
   
   
    bool b1 = std::cin.good();
    if( b1 = b )
    {
        std::cout << "Podana liczba rzeczywista to: " << b << std::endl;
    }
   
    else
         std::cout << " Nie podales liczby rzeczywistej ";
   
    return 0;
}
P-123010
wilkoo13
» 2014-12-17 17:15:45
Przed ifem masz
bool a1 = std::cin.good()
. Jak mówiłem cin.good() ma wartość 1, chyba że źle wprowadziłeś dane, w tedy przyjmuje wartość 0. Wcześniej użyłeś cin.clear() oraz cin.sync(), wyczyściłeś w ten sposób cin.good() oraz cin.false i ich wartość jest znowu standardowa, nawet jeśli wprowadziłeś źle lub dobrze wcześniej. Użyj cin.good() tuż po wprowadzeniu wartości ale przed cin.clear() i cin.sync(), aby do zmiennej bool wprowadzić 1 jeśli było dobrze i 0 jeśli było źle.

W warunku używa się == zamiast =. == sprawdza czy jest takie samo, jeśli jest to true jeśli nie to false. Dlatego użyj a1==1 i w drugim warunku b1==1.
P-123014
« 1 » 2
  Strona 1 z 2 Następna strona