Zadanie 15 - pętla do-while, problem z wyświetleniem linijki kodu
Ostatnio zmodyfikowano 2015-01-07 17:34
piotrlajewski Temat założony przez niniejszego użytkownika |
Zadanie 15 - pętla do-while, problem z wyświetleniem linijki kodu » 2015-01-06 20:43:59 Witam! Tak jak w temacie (Zadanie z kalkulatorem), a dokładniej: po kilkukrotnym wpisanie niewłaściwego znaku po kilku pętlach wpisuję prawidłowy, ale nie wyświetla "std::cout<<"Podana pierwsza liczba to: "<<a;", jeżeli od razu wpisać prawidłową - to wyświetla. Dziękuję za pomoc! #include <iostream> int main() { int a; std::cout << "Podaj pierwsza liczbe: "; std::cin >> a; if( std::cin.fail() ) do { std::cin.clear(); std::cin.sync(); std::cout << "Podaj prawidlowa pierwsza liczbe: "; std::cin >> a; } while( std::cin.fail() ); else std::cout << "Podana pierwsza liczba to: " << a; return 0; }
|
|
alixir |
» 2015-01-06 21:02:39 Wywal całkowicie warunek if/else i zamień pętlę do/while na while |
|
piotrlajewski Temat założony przez niniejszego użytkownika |
» 2015-01-06 21:44:47 Poproszę o nakierowanie trochę dalej...: #include <iostream> int main() { int a; std::cout << "Podaj pierwsza liczbe: "; std::cin >> a; while( std::cin.fail() );
|
|
wilkoo13 |
» 2015-01-06 22:43:18 Zrób pętlę do while. Do środka pętli wstawiasz WSZYSTKO a w warunku cin.fail(). Tylko że clear i sync wstawiasz przed warunkiem czyli przed wprowadzeniem danych. |
|
Memento96 |
» 2015-01-07 08:32:59 #include <iostream> int main() { int a; std::cout << "Podaj pierwsza liczbe: "; std::cin >> a; while( std::cin.fail() ) { std::cin.clear(); std::cin.sync(); std::cout << "Podaj prawidlowa pierwsza liczbe: "; std::cin >> a; } std::cout << "Podana pierwsza liczba to: " << a; return 0; }
Po co tutaj był if? To było zbędne Powtórz pętle while, nie umiesz jej użyć ;) cytat z tej strony : while( /* warunek kończący pętlę */ ) { //powtarzany blok instrukcji }
|
|
|
piotrlajewski Temat założony przez niniejszego użytkownika |
» 2015-01-07 13:13:31 Dzięki za pomoc, wczoraj - zgodnie z poradą wilkoo13 (bardzo dziękuję) - zmieniłem na do/while: #include <iostream> int main() { int a; std::cout << "Podaj pierwsza liczbe: "; std::cin >> a; do { std::cin.clear(); std::cin.sync(); std::cout << "Podaj prawidlowa pierwsza liczbe: "; std::cin >> a; } while( std::cin.fail() ); std::cout << "Podana pierwsza liczba to: " << a; return 0; }
Memento96, na stronie nie znalazłem osobnego while bez do, ale wielkie dzięki. Do tego też mam pytanie: na stronie jest przykład: #include <iostream> int main() { int ile; std::cout << "Ile razy wypisac napis? "; std::cin >> ile; if( ile > 0 ) do { std::cout << "Napis" << std::endl; ile--; } while( ile > 0 ); return 0; }
Rozumiem, że zapis "while( ile > 0 )" działa tak samo jak "while( ile )", skoro w nawiasie sprawdzana jest wartość różna od "0". |
|
darko202 |
» 2015-01-07 13:43:49 >>"while( ile > 0 )" działa tak samo jak "while( ile )", skoro w nawiasie sprawdzana jest wartość różna od "0".
pętla while(warunek logiczny ) warunek logiczny true/false dlatego 1 zapis jest poprawny a 2 "while( ile )" działa bo dokonywana jest niejawna konwersja do bool 0 -> false, inne -> true ale 2 to już inny warunek while (ile<>0)
dlatego polecam 1 ze względu na czytelność kodu, oraz błędów, które się pojawią gdy zawiedzie Cię ta niejawna konwersja i nie zobaczysz zmiany faktycznych warunków pętli
|
|
Memento96 |
» 2015-01-07 17:34:13 Dzisiaj w szkole rozmawialiśmy o tym przykładzie, pętla do while wykona się zawsze raz, czyli zawsze poprosi o ponowne podanie liczby, lepiej to samym while zrobić ;) |
|
« 1 » |