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

Pętla do ... while - zadanie domowe - pętla wyrywa się spod kontroli

Ostatnio zmodyfikowano 2017-04-07 09:51
Autor Wiadomość
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:

C/C++
#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?
P-159871
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.
P-159873
Saran
» 2017-04-06 12:23:07
P-159874
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.
P-159876
mateczek
» 2017-04-06 14:42:00
C/C++
#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

C/C++
#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;
}
P-159882
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:
C/C++
#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ć.
P-159892
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.
P-159941
« 1 »
  Strona 1 z 1