• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem C++. Pentla nieskończona ?

Object Storage Arubacloud
0 głosów
2,312 wizyt
pytanie zadane 30 kwietnia 2015 w C i C++ przez Wiciorny Ekspert (270,190 p.)

http://pastebin.com/ZsdytJyh Witam. Otóż jest to fragment programu, trochę po mojemu z kursu pana Mirosława.

Tu moje pytanie, dlaczego funkcja wykouje się w nieskończoność? Jeżeli... return stawiam nie w while, tylko return 0; wstawiam w funkcji main. Generalnie  pentla wypisuje komunikat albo w nieskończoność, że większa lub mniejsza? Z góry dziękuje za wyjaśnienie

 

Umieszczam link do kodu u góry. 

3 odpowiedzi

0 głosów
odpowiedź 30 kwietnia 2015 przez Boshi VIP (100,240 p.)

Cop w tym dziwnego? skoro podajesz raz liczbę przed pętlą, potem losujesz drugą i sprawdzasz w pętli warunek, jeżeli  podana przez ciebie liczba nie jest równa wylosowanej to pętla leci dalej i będzie leciałą dopóki podana przez ciebie liczba nie będzie równa wylosowanej, a że podajesz te dane przed pętlą to ta pętla nigdy się nie skończy bo  każdy kolejny obrót pracuje z tymi samymi danymi;]

 

#include <iostream>
#include <stdio.h>
#include <cstdlib> //funkcja rand
#include <time.h>

using namespace std;


int liczba, strzelaj;

int main()
{

        cout<<"Witamy w losowaniu! Wybierz sobie liczbe w przedziale 1..100:"<<endl;
        cout<<"Podaj liczbe z tego przedzialu: "<<endl;
        cin>>strzelaj;
        int licznik=0;


        srand(time(NULL));                               //start randomaizing, zacznij generowac liczy losowe


                        /* funkcja rand() oznacza przedzial dla 100 sa to liczby 0-99, wiec*/                                   // musimy dodac 1,

        while(strzelaj!=liczba)
{
 liczba= rand()% 100+1;
        if(strzelaj>liczba)
{
        cout<<"TWOJA liczba jest za duza "<<endl;
}
        else if(strzelaj == liczba)
{
        cout<<"Wygrales, liczba podana przez Ciebie jest prawidlowa"<<endl;
}
        else if(strzelaj < liczba)
{
        cout<<"Twoja liczba jest za mala. "<<endl;
}
licznik++;
   }
        cout<<"wypiszesz to gnoju"<< "liczba prob"<<licznik<<endl;
        return 0;

}

 

komentarz 30 kwietnia 2015 przez Wiciorny Ekspert (270,190 p.)
wstawiłem po prostu break do pentli i działa poprawnie. Mimo pobierania 2 liczb, przed pentlą.
komentarz 30 kwietnia 2015 przez Boshi VIP (100,240 p.)
Owszem, ale wyniku ci nie znajdzie poprawnego, bo pętla się przerwie po break, w takim razie pętla jest ci nie potrzebna bo i tak raz tylko sprawdzasz wynik.
0 głosów
odpowiedź 30 kwietnia 2015 przez Kelmac Gaduła (3,970 p.)
W każdej pętli musi być zmiana warunku pętli aby mogła ona się skończyć, bo tak za każdym obiegiem pętli warunek sie nie zmieni co powoduję, że pętla będzie nieskonczona
0 głosów
odpowiedź 1 maja 2015 przez Arsetus Gaduła (4,760 p.)

Wystarczy, że wytniesz ten kod na początku:

cout<<"Podaj liczbe z tego przedzialu: "<<endl;
cin>>strzelaj;

I wkleisz go wewnątrz pętli.

Pętla Ci ciągle sprawdza warunek dla jednej liczby. A liczba powinna się zmieniać za każdym obejściem pętli.

Wstaw ten kod przed if'ami w pętli.

Poza tym użyj pętli "do..while", ponieważ pętla ta sprawdzi warunek przynajmniej raz. W pętli "while" jeśli na samym początku liczba podana byłaby równa liczbie szukanej, to program by się zwiesił.

Pozdrawiam.

komentarz 1 maja 2015 przez Arsetus Gaduła (4,760 p.)
#include <iostream>
#include <stdio.h>
#include <cstdlib> //funkcja rand
#include <time.h>
 
using namespace std;
 
 
int liczba, strzelaj;
 
int main()
{              
       
        cout<<"Witamy w losowaniu! Wybierz sobie liczbe w przedziale 1..100:"<<endl;

 
 
        srand(time(NULL));                               //start randomaizing, zacznij generowac liczy losowe
        liczba= rand()% 100+1;  
       
                        /* funkcja rand() oznacza przedzial dla 100 sa to liczby 0-99, wiec*/                                   // musimy dodac 1,
       
        do
{      
 cout<<"Podaj liczbe z przedzialu: "<<endl;
        cin>>strzelaj;
        if(strzelaj>liczba)
{
        cout<<"TWOJA liczba jest za duza "<<endl;
}
        else if(strzelaj == liczba)
{
        cout<<"Wygrales, liczba podana przez Ciebie jest prawidlowa"<<endl;
}
        else if(strzelaj < liczba)
{
        cout<<"Twoja liczba jest za mala. "<<endl;
}
       
   } while(strzelaj!=liczba);

        return 0;
               

Tutaj masz przykład o co mi chodzi.

Podobne pytania

0 głosów
2 odpowiedzi 1,880 wizyt
pytanie zadane 1 czerwca 2016 w C i C++ przez BinaryMan Stary wyjadacz (12,620 p.)
+1 głos
3 odpowiedzi 1,279 wizyt
–2 głosów
5 odpowiedzi 1,694 wizyt

92,579 zapytań

141,432 odpowiedzi

319,657 komentarzy

61,963 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...