Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Zasto ovo vraca beskonacnu petlju?

[es] :: C/C++ programiranje :: Zasto ovo vraca beskonacnu petlju?

Strane: 1 2

[ Pregleda: 3613 | Odgovora: 20 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Ivan_HR

Član broj: 87291
Poruke: 142
*.adsl.net.t-com.hr.



Profil

icon Zasto ovo vraca beskonacnu petlju?27.12.2006. u 12:07 - pre 210 meseci
Zato ovaj kod kada unesem neko slovo, a ne broj, upada u beskonacnu petlju?
I jos me naravno zato zanima kako to sprijecit?
Code:
#include <iostream.h>

int Ulog(){
    int ulog=0;
    do {        
        cout << endl << "Odaberite ulog izmedju [1] i [100]" << endl;
        cout << "->";
        cin  >> ulog;            
    }    
    while (ulog < 1 || ulog > 100);
        return ulog;
    }

int main() {
    Ulog();
    return 0;    
}

Hvala na pomoci!
...trying to do my best...
 
Odgovor na temu

#Ninja#
Tuzla

Član broj: 28925
Poruke: 259
*.PPPoE-2767.sa.bih.net.ba.



+1 Profil

icon Re: Zasto ovo vraca beskonacnu petlju?27.12.2006. u 15:28 - pre 210 meseci
Ako uneseš ulog između 1 i 100, ulaziš u beskonačnu petlju koja stalno vraća tu vrijednost. Pokušaj sa if -> else.
 
Odgovor na temu

absBeg
BiH

Član broj: 97773
Poruke: 201
*.com
Via: [es] mailing liste



Profil

icon Re: Zasto ovo vraca beskonacnu petlju?27.12.2006. u 15:54 - pre 210 meseci
>
kad uneses slovo onda comp prevede ASCI vrijednost tog slova koja je
vjerojatno preko 100. sjeti se da si rekao kompajleru da unosis int, a
ne char ;)
"I don't read books, but I have friends who do."
George W. Bush
 
Odgovor na temu

SuPeR_MaSteR
Marko Stamenković

Član broj: 88590
Poruke: 115
*.inffo.net.



Profil

icon Re: Zasto ovo vraca beskonacnu petlju?27.12.2006. u 19:00 - pre 210 meseci
Hm..Ne bih rekao.

Iteracija se odvija sve dok je ulog manji od 1 ili ulog veci od 100 i tek posle petlje se funkciji vraca vrednost varijable ulog.
A ako korisnik unese char umesto int dodela se uopste ne izvrsava, tj. varijabla ulog ce imati vrednost kakvu je imala pre dodele, a imala je:
Code:
int ulog=0;

Tako da je u slucaju unosenja slova, ovaj uslov ispunjen:
Code:
(ulog < 1 || ulog > 100)

Posto je varijabla ulog i dalje 0, petlja se ponavlja. U baferu se nalazi prethodni (nepravilan) unos tako da se automatski ponovo ucita u varijablu ulog, i ponavlja se ista prica..

Edit:
Ovako se nece javljati beskonacna petlja:
Code:

#include<cstdlib>
...
cin >> ulog;
if (cin.fail())
   break;
}
while (ulog < 1 || ulog > 100);
....


Ili jednostavno u definiciji funkcije pri deklarisanju varijable ulog, inicijalizuj je odmah (na primer) na 1.

[Ovu poruku je menjao SuPeR_MaSteR dana 27.12.2006. u 20:32 GMT+1]
 
Odgovor na temu

NastyBoy
Bojan Nastic
UK

Član broj: 12041
Poruke: 895
*.plus.com.



+4 Profil

icon Re: Zasto ovo vraca beskonacnu petlju?27.12.2006. u 19:45 - pre 210 meseci
Po 1000-ti put - Debugger is your friend!
 
Odgovor na temu

Ivan_HR

Član broj: 87291
Poruke: 142
*.adsl.net.t-com.hr.



Profil

icon Re: Zasto ovo vraca beskonacnu petlju?28.12.2006. u 00:28 - pre 210 meseci
Hvala na pomoci! Pomoglo je rjesenje sa /cin.fail()/ samo sto jos onda nakon toga trebam napravit nekako da mi ponovno ispisuje ono sve za ponovan unos broja posto ovako ostane inicijalizirana vrijednost!
...trying to do my best...
 
Odgovor na temu

Ivan_HR

Član broj: 87291
Poruke: 142
*.adsl.net.t-com.hr.



Profil

icon Re: Zasto ovo vraca beskonacnu petlju?28.12.2006. u 10:51 - pre 210 meseci
E ovako! Ipak nije pomoglo!

Dogadja se jedna vrlo zanimljiva stvar za raspravu. Nakon provjere // if(cin.fail()) // program se odvrti automatski do kraja bez vise ikakvih ponuda za unos. Mozda nisam jasan pa evo primjer.
Code:
#include <iostream>
using namespace std;

int Ulog(){
    int ulog=2;
    do {        
        cin  >> ulog;
        if (cin.fail())
        break;
    }    
    while (ulog < 1 || ulog > 100);
    return ulog;
    }

int main() {
    cout << endl << "Odaberite ulog izmedju [1] i [100]" << endl;
    cout << "->";
    cout << "Ulog je: " << Ulog() << endl;
    int novo;
    cout << "Ovdje se trebalo unijeti nesto novo!!!" << endl;
    cin >> novo;
    return 0;    
}


Ako unesem dobar broj ponudi mi da unesem i varijablu novo, a ako unesem neko slovo kao da red
// cin >> novo // ne postoji!
To mi i je u principu glavni problem jer ako slucajno na pocetku igre koju sam pravio unesem za ulog neko slovo vrti mi stalno cijelu igru sa default vrijednostima u beskonacnost!!
...trying to do my best...
 
Odgovor na temu

SuPeR_MaSteR
Marko Stamenković

Član broj: 88590
Poruke: 115
*.inffo.net.



Profil

icon Re: Zasto ovo vraca beskonacnu petlju?28.12.2006. u 11:33 - pre 210 meseci
Evo ovako ce ti uvek ponuditi da uneses ponovo:
Code:

#include <iostream>
using namespace std;
int Ulog();
bool indikator = true;
int main()
{
    while (indikator)
    try
    {
        Ulog();
    }
    catch (char const *)
    {
        cin.clear();
        cout << "Nepravilan unos." << endl;
        indikator = true;
    }
    return 0;
}
int Ulog()
{
    int ulog = 0;
    cout << endl << "Odaberite ulog izmedju [1] i [100]" << endl;
    cout << "->";
    fflush(stdin);
    cin >> ulog;
    if (ulog < 1 || ulog > 100 || cin.fail())
        throw "error";
    indikator = false;
}
 
Odgovor na temu

Ivan_HR

Član broj: 87291
Poruke: 142
*.adsl.net.t-com.hr.



Profil

icon Re: Zasto ovo vraca beskonacnu petlju?28.12.2006. u 11:41 - pre 210 meseci
Puno hvala na trudu! Sad je sve rijeseno i radi kako treba.

P.S.jel bi mi neko mogao kratko objasniti sta rade ove dvije naredbe

fflush(stdin); i cin.clear();


[Ovu poruku je menjao Ivan_HR dana 28.12.2006. u 13:57 GMT+1]

[Ovu poruku je menjao Ivan_HR dana 28.12.2006. u 14:19 GMT+1]
...trying to do my best...
 
Odgovor na temu

absBeg
BiH

Član broj: 97773
Poruke: 201
*.com
Via: [es] mailing liste



Profil

icon Re: Zasto ovo vraca beskonacnu petlju?28.12.2006. u 12:59 - pre 210 meseci
>
Supermaster: U pravu si. U brzini sam zakljucio da je to greska, posto
je to cesta pojava. :D
"I don't read books, but I have friends who do."
George W. Bush
 
Odgovor na temu

Ivan_HR

Član broj: 87291
Poruke: 142
*.adsl.net.t-com.hr.



Profil

icon Re: Zasto ovo vraca beskonacnu petlju?28.12.2006. u 14:37 - pre 210 meseci
Ajd da ne postavljam novu temu moze jos jedno kratko pitanje ovdje.

kako da mi neka petlja reagira na pritisak ENTER, ono da ne moram napisat 'y' pa stisnit enter nego da mi enter odmah znaci da je unos dobar???

ako koristim cin.peek() on reagira tek kad stisnem noko slovo pa onda iduci puta reagira na enter


[Ovu poruku je menjao Ivan_HR dana 28.12.2006. u 15:48 GMT+1]
...trying to do my best...
 
Odgovor na temu

absBeg
BiH

Član broj: 97773
Poruke: 201
*.com
Via: [es] mailing liste



Profil

icon Re: Zasto ovo vraca beskonacnu petlju?28.12.2006. u 14:48 - pre 210 meseci
>
mozda preko?!
Code:
if (znak=='n')

"I don't read books, but I have friends who do."
George W. Bush
 
Odgovor na temu

Ivan_HR

Član broj: 87291
Poruke: 142
*.adsl.net.t-com.hr.



Profil

icon Re: Zasto ovo vraca beskonacnu petlju?28.12.2006. u 15:02 - pre 210 meseci
To mi znaci da moram upisat 'n' da bi mi izvrsio ono sto je pod // if //
mene zanima kako da napravim da mi reagira na pritasak tipke ENTER znaci npr...
hocu napisat ovako nesta "Za nastavak pritisni ENTER" stisnem ENTER i program se nastavlja

bez unosa ikakvog drugog znaka.......
...trying to do my best...
 
Odgovor na temu

absBeg
BiH

Član broj: 97773
Poruke: 201
*.com
Via: [es] mailing liste



Profil

icon Re: Zasto ovo vraca beskonacnu petlju?28.12.2006. u 15:24 - pre 210 meseci
>
oprosti, omaklo mi se slovo. mislio sam na 'n' (backslash + n) koji je
oznaka novog reda.
"I don't read books, but I have friends who do."
George W. Bush
 
Odgovor na temu

Ivan_HR

Član broj: 87291
Poruke: 142
*.adsl.net.t-com.hr.



Profil

icon Re: Zasto ovo vraca beskonacnu petlju?28.12.2006. u 15:30 - pre 210 meseci
ne moze se tako napravit isprobao sam.........
...trying to do my best...
 
Odgovor na temu

SuPeR_MaSteR
Marko Stamenković

Član broj: 88590
Poruke: 115
*.inffo.net.



Profil

icon Re: Zasto ovo vraca beskonacnu petlju?28.12.2006. u 20:30 - pre 210 meseci
Code:

void ask()
{
    cout << "\nPress ENTER to continue";
    cin.get();
}

Mozes koristiti i ovo:
Code:
system("PAUSE");

Jednostavnije je ali zavisi od skoljke.

A sto se tice fflush(stdin) i cin.clear() sta mislis da bacis pogled na:
http://www.cplusplus.com/ref/

 
Odgovor na temu

Ivan_HR

Član broj: 87291
Poruke: 142
*.adsl.net.t-com.hr.



Profil

icon Re: Zasto ovo vraca beskonacnu petlju?29.12.2006. u 09:28 - pre 210 meseci
Citat:
SuPeR_MaSteR: A sto se tice fflush(stdin) i cin.clear() sta mislis da bacis pogled na:
http://www.cplusplus.com/ref/


Hvala za link tako nesta mi je trebalo..

Sto se tice ovog ostalog izgleda da se nismo razumjeli.. Ja sam mislio na ovakav primjer.. recimo da imam petlju u kojoj provjeravam dali su mi dobro unesene neke varijable, znaci ispisem ih na zaslonu i u slucaju da je sve dobro uneseno upisem 'y' pa enter naravno za potvrdu, u slucaju da nije dobro uneseno upisujem 'n' pa enter... e sada ja zelim da za krivi unos ostane sve isto no u slucaju da je sve u redu samo stisnem enter, znaci ne moram vise upisivat onaj 'y'. Dali je to moguce napravit??
...trying to do my best...
 
Odgovor na temu

DjoleReject
Djordje Knezevic
Zvezdara

Član broj: 85258
Poruke: 309
*.dynamic.sbb.co.yu.



+1 Profil

icon Re: Zasto ovo vraca beskonacnu petlju?29.12.2006. u 17:36 - pre 210 meseci
Pokusao je covek dva puta, ali mu nesto ne ide :)

if(c == '\n') . . .

je trik koji ti treba

De si Deda...
 
Odgovor na temu

Ivan_HR

Član broj: 87291
Poruke: 142
*.adsl.net.t-com.hr.



Profil

icon Re: Zasto ovo vraca beskonacnu petlju?29.12.2006. u 22:14 - pre 210 meseci
stalno mi pisete jednu te istu stvar koja uopce ne radi...
ajd probaj ovo iskompajlirat pa vidi jel reagira na enter.......
Code:
#include <iostream>
using namespace std;

int main() {
    char znak;
    cin >> znak;
    if (znak == '\n') {
        cout <<"stiso si enter";
    }
    return 0;
}

ajd mi sad to obajsni..
...trying to do my best...
 
Odgovor na temu

absBeg
BiH

Član broj: 97773
Poruke: 201
*.com
Via: [es] mailing liste



Profil

icon Re: Zasto ovo vraca beskonacnu petlju?30.12.2006. u 09:50 - pre 210 meseci
>
Ivane, poenta je sto koristis 'cin' koji je prilicno glup. Evo probao
sam tvoj kod sa "pametnom" cin.get() i fino radi. Staro je pravilo, a i
sala da cin jedino pravilno radi sa integerima :)

Code:
int main()
{
    char znak;
    cout << "Unesi neki znak: ";
    cin.get(znak);
    if (znak == 'n') {
        cout <<"stiso si enter";
    }
    else
        cout << "nista se nije dogodilo";

    return 0;
}

"I don't read books, but I have friends who do."
George W. Bush
 
Odgovor na temu

[es] :: C/C++ programiranje :: Zasto ovo vraca beskonacnu petlju?

Strane: 1 2

[ Pregleda: 3613 | Odgovora: 20 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.