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

Pomoc oko funkcije

[es] :: C/C++ programiranje :: C/C++ za početnike :: Pomoc oko funkcije

[ Pregleda: 2085 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

wiktor91
Varazdin, Hrvatska

Član broj: 171052
Poruke: 116
*.adsl.net.t-com.hr.



Profil

icon Pomoc oko funkcije11.11.2009. u 19:17 - pre 175 meseci
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?
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.
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4901
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Pomoc oko funkcije11.11.2009. u 19:42 - pre 175 meseci
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.

 
Odgovor na temu

wiktor91
Varazdin, Hrvatska

Član broj: 171052
Poruke: 116
*.adsl.net.t-com.hr.



Profil

icon Re: Pomoc oko funkcije11.11.2009. u 21:16 - pre 175 meseci
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!


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.
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4901
93.87.4.*

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Pomoc oko funkcije12.11.2009. u 06:42 - pre 175 meseci
^
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.
 
Odgovor na temu

Goran Arandjelovic
Beograd

Član broj: 29116
Poruke: 387
*.dynamic.sbb.rs.



+9 Profil

icon Re: Pomoc oko funkcije13.11.2009. u 16:05 - pre 174 meseci
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.
 
Odgovor na temu

BlackSpyder
xander ivonovic
internet security zavrseno skolovanje u
austriji
Srbija - Austrija

Član broj: 246568
Poruke: 3
212.200.65.*

Jabber: C++ programer
Sajt: www.blackspyder.de


Profil

icon Re: Pomoc oko funkcije10.01.2010. u 17:12 - pre 173 meseci
//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;
}

Xander Ivonovic
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Pomoc oko funkcije

[ Pregleda: 2085 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

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