Kurzciel Temat założony przez niniejszego użytkownika |
Pętla do ... while - zadanie domowe - pętla wyrywa się spod kontroli » 2017-04-06 12:14:01 Dzień Dobry, Mam problem z zadaniem domowym (jak w temacie). Najpierw kod: #include <iostream> #include <stdlib.h>
int main()
{ int liczba; std::cout << "Podaj liczbe. Aby zakonczyc program, liczba powinna byc mniejsza niz 60, ale wieksza niz 48." << std::endl; do { std::cin >> liczba; std::cout << "Podales liczbe: " << liczba << "\nAby zakonczyc, wprowadz inna, prawidlowa liczbe, jeszcze raz: "; } while( liczba > 60 || liczba < 48 ); std::cout << "Podales prawidlowa liczbe, gratulacje!" << std::endl; system( "PAUSE" ); return 0; }
Otóż, kiedy wklepiemy jakąkolwiek liczbę z przedziału 48 - 60, wyświetli nam się informacja "Podales liczbe: Aby zakonczyc, wprowadz inna, prawidlowa liczbe, jeszcze raz: Podales prawidlowa liczbe, gratulacje!". Trochę tak, jakby po wpisaniu prawidłowej wartości, pętla załączała się jeszcze raz i dopiero wtedy wrzucała to co trzeba. Ciekawe jest też to, że mimo znaków "<" i ">", liczby 48 i 60 są akceptowalne przez program. Co mi umyka? |
|
carlosmay |
» 2017-04-06 12:22:25 Ciekawe jest też to, że mimo znaków "<" i ">", liczby 48 i 60 są akceptowalne przez program. |
Taki jest warunek. Liczba 60 nie jest większa od 60 i to samo jest z 48, więc wpisanie 60 powoduje opuszczenie pętli. |
|
Saran |
» 2017-04-06 12:23:07 |
|
Kurzciel Temat założony przez niniejszego użytkownika |
» 2017-04-06 12:56:23 Saran, przy operatorze "&&" program akceptuje wszystko jak leci.
carlosmay, Po co w takim razie znaki "=<" i "=>" ? Wpisana liczba ma być mniejsza, niż 60 , nie może być równa (brak "=" przy znaku "<").
Obydwie uwagi i tak nie tłumaczą, dlaczego program wrzuca całą treść po wpisaniu prawidłowej (za wyjątkiem 48 i 6) liczby. |
|
mateczek |
» 2017-04-06 14:42:00 #include <iostream> int main()
{ int liczba; std::cout << "Podaj liczbe. Aby zakonczyc program, liczba powinna byc mniejsza niz 60, ale wieksza niz 48." << std::endl; while( std::cin >> liczba, liczba > 60 || liczba < 48 ) { std::cout << "Podales liczbe: " << liczba << "\nAby zakonczyc, wprowadz inna, prawidlowa liczbe, jeszcze raz: "; } std::cout << "Podales prawidlowa liczbe, gratulacje!" << std::endl; return 0; }
lub tak #include <iostream> int main()
{ int liczba; std::cout << "Podaj liczbe. Aby zakonczyc program, liczba powinna byc mniejsza niz 60, ale wieksza niz 48." << std::endl; std::cin >> liczba; while( !( liczba > 48 && liczba < 60 ) ) { std::cout << "Podales liczbe: " << liczba << "\nAby zakonczyc, wprowadz inna, prawidlowa liczbe, jeszcze raz: "; std::cin >> liczba; } std::cout << "Podales prawidlowa liczbe, gratulacje!" << std::endl; return 0; }
|
|
Chowan |
» 2017-04-06 18:46:55 wydaje mi się, że problemem jest uzycie petli do while, gdzie zapis w petli wykona sie przynajmniej raz i dlatego nawet jak podasz prawidłowe dane to i tak wykona najpierw std::cout << "Podales liczbe: " << liczba << "\nAby zakonczyc, wprowadz inna, prawidlowa liczbe, jeszcze raz: "; natomiast petla while nie wykona się ani razu jesli pierwsze dane są ok. Na tym etapie kursy chyba nie ma pętli while, ale ja bym dał warunek w środku if i z robił tak: #include <iostream> #include <stdlib.h>
int main()
{ int liczba; std::cout << "Podaj liczbe. Aby zakonczyc program, liczba powinna byc mniejsza niz 60, ale wieksza niz 48." << std::endl; do { std::cin >> liczba; if( liczba > 60 || liczba < 48 ) { std::cout << "Podales liczbe: " << liczba << "\nAby zakonczyc, wprowadz inna, prawidlowa liczbe, jeszcze raz: "; } } while( liczba > 60 || liczba < 48 ); std::cout << "Podales prawidlowa liczbe, gratulacje!" << std::endl; system( "PAUSE" ); return 0; }
ale sam dopiero przerabiam kurs więc mogę się mylić. |
|
Kurzciel Temat założony przez niniejszego użytkownika |
» 2017-04-07 09:51:28 @Chowan, faktycznie, z 'if' śmiga tak, jak powinno śmigać, dzięki za pomoc! Swoją drogą, masz rację, pętla 'while' pojawia się dopiero sporo dalej po tym zadaniu. |
|
« 1 » |