• 5 odgovora
  • 2.873 pregleda
Pomoc oko funkcije 11.11.2009. u 19:17 · pre 206 meseci #1
Radim jedan programcic za vježbu pa sam odlučio staviti neke stvari u funkcije da nemoram stalno pisati cjeli kod.
Pošto sam početnik ne znam baš baratati funkcijama pa me muči jedna stvar.

Evo funkcija ponoviProgram(), znači upit dali želimo ponoviti program ili izači iz programa.

Code:
void ponoviProgram()
{
    char yn;
ponoviUpit:
    cout << "Želite li ponoviti program?(y/n)"; cin >> yn;
    if ( yn == 'y' )
    {
        goto ispocetka;
    }
    else if ( yn == 'n' )
    {
        cout << "Pozdrav korisnice!" << endl;
        Sleep(1000);
    }
    else
    {
        goto ponoviUpit;
    }
}


E sad meni debuger javlja grešku "label ispocetka used but not defined".

Kako rješiti ovaj problem?
Potpis
Windows 95 /Win’ dz/: n., 32-bit extensions and a graphical shell for a 16-bit patch to an 8-bit operating system
originally coded for a 4-bit microprocessor, written by a 2-bit company, that can’t stand 1 bit of competition.
Re: Pomoc oko funkcije 11.11.2009. u 19:42 · pre 206 meseci #2
goto se odavno smatra prevazidjenim i pogresnim stilom u C/C++ programiranju, kada se koristi u slucajevima kao sto je taj koga si prikazao.

Otprilike ovako treba:
Code:

#include <iostream>
using namespace std;

int main()
{
    char yn;
    do
    {
        cout << "OVDE NEKI TVOJ KOD!" << endl;


        cout << "Želite li ponoviti program?(y/n)";
        cin >> yn;
    } while ( yn != 'n' && yn != 'N' );

    return 0;
}



Inace, poruka koju si dobio je dovoljno opisna: nemas nigde definisanu labelu ispocetka, kao sto imas ponoviUpit. (necu ni da posumnjam da si tu labelu stavio u neku sasvim drugu funkciju, jer bi to onda bilo definitivno pogresno).

Taj kod sa goto lici na neki stari BASIC program.

Re: Pomoc oko funkcije 11.11.2009. u 21:16 · pre 206 meseci #3
Labelu ispocetka sam postavio u main funkciju.

Znam da je goto nepoželjna naredba ali što kad mi recimo zatreba povratak na neki dio koda koj ne mogu smjestiti u do-while petlju? Što je "aktualno" i što se koristi? Do while sad ovu funkciju odlično obavlja ali zamišljam neke situacije kad bi bila neprikladna i teška za primjeniti.

Hvala ti na pomoči!

Potpis
Windows 95 /Win’ dz/: n., 32-bit extensions and a graphical shell for a 16-bit patch to an 8-bit operating system
originally coded for a 4-bit microprocessor, written by a 2-bit company, that can’t stand 1 bit of competition.
Re: Pomoc oko funkcije 12.11.2009. u 06:42 · pre 206 meseci #4
^
Citat:

Znam da je goto nepoželjna naredba ali što kad mi recimo zatreba povratak na neki dio koda koj ne mogu smjestiti u do-while petlju? Što je "aktualno" i što se koristi? Do while sad ovu funkciju odlično obavlja ali zamišljam neke situacije kad bi bila neprikladna i teška za primjeniti.

Kao što rekoh, skokovi iz bloka u blok su karakteristični za BASIC i neke druge interpreterske jezike, ali nisu za C/C++. goto ima par specifičnih upotreba, uglavnom kada treba 'jeftino' izaći iz neke višestruke unutrašnje petlje i sl, ali nikako za skokove iz bloka u blok. To sasvim pogrešno i sa semantičkog gledišta, jer su blokovi sasvim nezavisne programske celine, sa svojim setom lokalnih promenljivih, koje nisu predviđene za bilo kakvu kontrolu spolja u tom vidu.

Ako imaš potrebu za povratak na deo koda koji se nemože smestiti u do-while, onda moraš razmisliti o redizajnu tog 'zajedničkog' dela koda, koga možeš izdvojiti u neku posebnu zajedničku funkciju/metodu. Komunikaciju između delova koda rešavaš na razne načine, recimo povratnim vrednostima funkcije.

Sve se može rešiti bez goto, potrebno je samo bolje poznavati jezik, razmisliti o (re)dizajnu, a prvi korak je zaboraviti 'linijski' načinom razmišljanja u C/C++ jezicima.
Re: Pomoc oko funkcije 13.11.2009. u 16:05 · pre 206 meseci #5
Evo mene, imao sam neke veće obaveze na poslu, pa me nije bilo neko vreme....
Elem, da dodam samo, sve što je X Files pomenuo manje-više važi i za break i continue sem u neki specifičnim slučajevima. Ali, opet, to ne znači da treba od njih bežati kao đavo od krsta... ako se već dođe do toga (a pravilnim razvojem ne bi trebalo) da je u nekoj maloj funkciji lakše rešiti nešto goto naredbom, pa bože moj... neka i bude tako ako je dobro iskomentarisano i ako taj flow ne predstavlja doslovce neko spaghetti programiranje.
Re: Pomoc oko funkcije 10.01.2010. u 17:12 · pre 204 meseci #6
//MALO si pravio greske kod koda to jest puno evo ti ispravan kod izbaci goto naredbu
//===============================================================
/***********************************************
Ovo tije ispravna funkcija
kompajliraj ovo sa DevCpp
bez gresaka je program.
i u buduce izbaci ----> goto naredbu
nije prakticna.
***********************************************/

#include <windows.h>
#include <iostream>

using namespace std;
void ponoviProgram()
{
char yn;
cout << "Želite li ponoviti program?(y/n)\n\n";
cin >> yn;

if( yn == 'n' )
{
cout<<"Hvala sto koristite nas program i dovidjenja"<<endl;
Sleep(1000);

}
else if( yn == 'y' )
{
cout << "Pozdrav korisnice dobro dosli nazad!" << endl;
Sleep(2000);
}
}
int main()
{

ponoviProgram();

return EXIT_SUCCESS;
}
Potpis
Xander Ivonovic
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme