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. #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; } |
|
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. |
|
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 int a; bool a1 = std::cin.good();
A dalej: 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: 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". |
|
wilkoo13 |
» 2014-12-17 13:46:20 Pokaż jak wygląda twój poprawiony kod (cały). |
|
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! #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; }
|
|
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 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, |
|
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: #include <iostream> int main() { int a; float b; 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; }
|
|
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. |
|
« 1 » 2 |