[C++] instrukcja goto


(Kosa2) #1

Witam,

załóżmy że mam takie coś:

funkcja(){

//jakies instrukcje

goto top_main;

}

funkcja2(){

//jakies instrukcje 2

goto top_main;

}

main(){

top_main:

//jakies instrukcje main

}

zrobiłem sobie w funkcji main miejsce skoku i chciałbym z funkcja() albo funkcja2() przeskoczyć do któregoś momentu w main(). Niestety VC++2k8 wywala mi taki oto błąd: error C2094: label 'top_main' was undefined. Jak mam w takim razie zdefiniować ten top_main żeby mi tam przeskoczyło? Ewentualnie w jaki inny sposób mogę wyjść z jednej funkcji a wejść do innej korzystając z innej instrukcji?

Pozdrawiam.


(Piotrrj) #2

instrukcja return zamiast goto

czyżbyś wcześniej uczył się basica? :stuck_out_tongue:


(Sawyer47) #3

Zapamiętaj, żeby nigdy nie używać goto, gdyż w istocie prawie nigdy się go nie używa. Radzę poczytać o podstawach C++.


(Kosa2) #4

czyli mam zmienic np na return main?

p.s nie, C++ jest pierwszy, po prostu wyczytałem gdzieś że skok można przez goto zrobić i tyle.


(Piotrrj) #5

nie, po return możesz wpisać wynik zwracany przez funkcję, w funkcji możesz zastosować kilka instrukcji return zwracających różne wyniki

np.

int suma(int a, int b) {

return a+b;

}

main() {

int i;

i = suma(2, 2);

}


(Sawyer47) #6

Nie zupełnie nie tak się to robi w C++. Radzę zapomnieć zupełnie o istnieniu goto - w 99.999% przypadków jest zbędne. W C++ main to główna funkcja która jest wykonywana jako pierwsza i to w niej umieszcza się wszelkie instrukcje. W dodatku funkcja zwraca coś (lub niczego nie zwraca) i return służy właśnie do zwracania wartości.

Czyli np. definicja funkcji:

int funkcja() { return 5; }

Jeżeli chce się ją wykonać to umieszcza się wewnątrz funkcji main, np.:

int funkcja() { return 5; }


int main() {

    funkcja(); // wywołanie funkcji

}

(Kosa2) #7
koniec(){

cout << "\nZakonczyc program?: [T/N]";

cin >> wybor;

switch(wybor)

{

case 'T': //program sie wylacza

break;

case 'N': //program ma rozpocząć działanie od początku

break;

default:

cout << "Blad, wybierz ponownie" //jak sie wyświetli to funkcja koniec() ma sie powtórzyć

}

}

Chciałbym wiedzieć czym zastąpić te komentarze żeby działało tak jak tam jest napisane.

Pozdrawiam.


(somekind) #8

Umieść właściwy kod programu w pętli np. do...while. Pod koniec spytaj, czy program ma zostać zakończony, jeśli tak, to zakończ, jeśli nie, wykonaj pętle znowu. Będzie najprościej i bez okropnego goto.