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

bug u vjesalima

[es] :: C/C++ programiranje :: bug u vjesalima

[ Pregleda: 1366 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

zdmaras

Član broj: 24335
*.cmu.carnet.hr.



Profil

icon bug u vjesalima02.07.2005. u 18:30 - pre 189 meseci
program otprilike radi,ali nakon sta 5,6 puta odaberem ponovnu igru, neka slova se prikazu na mjestu na kojem se ne nalaze, a ako se poslije unese slovo koje ide na to mjesto,tada se krivo izbrise, i sve je kako triba.Budući da sam ja početnik u c-u, ne znam to riješit.

hvala
Prikačeni fajlovi
 
Odgovor na temu

Marko Stankovic

Član broj: 11
Poruke: 306
212.200.120.*



Profil

icon Re: bug u vjesalima03.07.2005. u 10:25 - pre 189 meseci
Nisam primetio taj bug o kome pricas ali cu da ti skrenem paznju na par stvari. Prvo kada pises program u c-u snimi ga sa ekstenzijom .c a ne .cpp. Drugo koriscenje labela i goto naredbe eliminisi odmah i nikad vise ni ne pomisljaj na tako nesto.
Znaci ti si radio ovako:
Code:

pon:
    puts("Unesi ime datoteke sa rijecima:");
    gets(ime);
    spis=fopen(ime,"r");

    if(spis==NULL) //ako datoteka ne postoji
    {
        puts("GRESKA PRI OTVARANJU DATOTEKE");
        goto pon;
    }

bez goto bi bilo ovako:
Code:

while(1){
        puts("Unesi ime datoteke sa rijecima:");
        gets(ime);
        if(spis=fopen(ime,"r")) break; /* ovde ukoliko spis nije null izlazimo iz while i idemo dalje */
        printf("GRESKA PRI OTVARANJU DATOTEKE\n"); /* ukoliko je spis null ispisujemo ovo i opet sve ispocetka */
}


Trece sto sam primetio jeste da kada procitas izbor koji se unese sa tastature ti prvo citas broj unesenih gradova, drzava i slicno iz fajla pa onda pomocu switcha proveravas da li je unesen dobar izbor, pa ako nije opet unosis ime datoteke iako je ona ispravno unesena, pa opet sve ovo... sve u svemu previse posla se izvrsava ako dodje do pogresnog unosa izbora. Moja preporuka je da odmah proveravas da li je unesen dobar izbor i ako nije opet trazis unos.
Znaci taj deo koda oko izbora treba da bude ovakav:
Code:

while(1){
        puts("\nGRAD (1)\nDRZAVA (2)\nRAZNO(3)");//korisniku se nudi mogucnost odabira
        scanf("%d",&j);
        fflush(stdin);
        if(j>0&&j<4) break; /*unesen je ispravan izbor jer j je izmedju [1,3] pa prekidamo while i idemo dalje */
        printf("POGRESAN IZBOR!!! PROBAJTE PONOVO!!!\n"); /*ukoliko j pogresno ispisujemo poruku 
        i while nastavlja da se izvrsava */
}

E sad si u ostatku koda siguran da je izbor ispravan i mozes slobodno da citas podatke iz datoteke.

I cetvrta stvar je da oslobodis memoriju koju si dinamicki alocirao sa malloc(). Znaci kada ti vise nije potrebna uradis jedan free(rijec2); i miran si :)

Sve u svemu program je prilicno lose struktuiran i to cini mi se ponajvise zbog labela i skokova pomocu goto. Primeni ovo sto sam ti rekao pa onda testiraj da li ces imati bug. U svakom slucaju ako imas jos neki problem pisi :)

pozdrav




[Ovu poruku je menjao Marko Stankovic dana 03.07.2005. u 11:26 GMT+1]
I drink to make other people interesting.
 
Odgovor na temu

zdmaras

Član broj: 24335
*.cmu.carnet.hr.



Profil

icon Re: bug u vjesalima03.07.2005. u 11:24 - pre 189 meseci
Evo, sad sve radi kako bi trebalo.Hvala, posteno si se ti potrudija sa napises sve ovo.
Zasto svi toliko preziru "goto" naredbu?Maka san ih sve osim jedne, one za ponovnu igru, jos jedan put hvala

[Ovu poruku je menjao zdmaras dana 03.07.2005. u 14:18 GMT+1]
 
Odgovor na temu

[es] :: C/C++ programiranje :: bug u vjesalima

[ Pregleda: 1366 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

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