• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Zwracanie char'a przez funkcje C++

0 głosów
1,112 wizyt
pytanie zadane 26 marca 2016 w C i C++ przez TheFeniks Gaduła (4,690 p.)
zamknięte 26 marca 2016 przez TheFeniks

Cześć! :)

Do rzeczy mam sobie taką funkcje:

char main_menu()
{
 char choice1;
 bool l_menu;

    l_menu=true;
    while( l_menu )
    {
     system("cls");
     
     //Cos tam

     cout<<"Wybor:";
     choice1=getch();

     if((choice1>='3')||(choice1=='0'))
     {
        cout<<endl;
        cout<<"  Nie ma takiej opcji w menu!"<<endl;
        Sleep(1000);
     }
     else
     {
        l_menu=false;
        return choice1;
     }

    }//Petla

}//Funkcja

I w main

 

char choice1;

int main()
{

    main_menu();

    system("cls");
    if(choice1=='1')
    {
     cout<<"return dziala!";
    }

}

Problem polega na tym że po wykonaniu się funkcji main_menu() nie wykonuje się warunek if(choice1=='1')

 

komentarz zamknięcia: Rozwiązano problem

1 odpowiedź

+1 głos
odpowiedź 26 marca 2016 przez Sebastian Fojcik Nałogowiec (43,040 p.)
wybrane 26 marca 2016 przez TheFeniks
 
Najlepsza

Witaj,

problemem jest to, że w Twoim programie istnieją 2 zmienne o nazwie choice1. Jedna z nich jest globalna, a druga lokalna (wewnątrz funkcji main_menu().

Usuń z funkcji main_menu() definicję zmiennej choice1 i wszystko powinno działać ;-)

PS. Sposób w jaki zrobiłeś to menu woła o pomstę do nieba, ale nie to jest tematem tego posta, więc odpuszczam :D

komentarz 26 marca 2016 przez TheFeniks Gaduła (4,690 p.)
Tylko że funkcja jest w odzielnym pliku .cpp  i jest błąd.

'choice1' was not declared in this scope :P

A co jest takiego złego w tej funkcji ? :P
komentarz 26 marca 2016 przez Sebastian Fojcik Nałogowiec (43,040 p.)

Ah no tak!

Wybacz, nie zwróciłem uwagi, że to inny plik :D

W takim razie masz wiele możliwości. 

SPOSÓB 1: Nad funkcją main_menu() umieść:

extern char choice1;

SPOSÓB 2: Przekaż zmienną przez referencję:

char main_menu( char & choice1 )
{
 bool l_menu;
 
    l_menu=true;
    while( l_menu )
    {
     system("cls");
      
     //Cos tam
 
     cout<<"Wybor:";
     choice1=getch();
 
     if((choice1>='3')||(choice1=='0'))
     {
        cout<<endl;
        cout<<"  Nie ma takiej opcji w menu!"<<endl;
        Sleep(1000);
     }
     else
     {
        l_menu=false;
        return choice1;
     }
 
    }//Petla
 
}//Funkcja
int main()
{
    char choice1;
    main_menu( choice1 );
 
    system("cls");
    if(choice1=='1')
    {
     cout<<"return dziala!";
    }
 
}

Możliwości jest jeszcze kilka, ale sposób w jaki zrobiłeś to menu już jest błędny:
- używanie globalnych zmiennych
- rozdzielanie funkcji do osobnych plików
Ta pętla niby działa, ale można to zapisać troszkę prościej :-)

komentarz 26 marca 2016 przez TheFeniks Gaduła (4,690 p.)
Super działa dzięki użyłem tego sposobu z referencją :).

To jak inaczej rozdzielić main.cpp ?

Pisze teraz nową grę w konsoli i myśle że kod będzie troche długi więc myśle że przydało by się go rodzielić na kilka .cpp . :)
komentarz 26 marca 2016 przez Sebastian Fojcik Nałogowiec (43,040 p.)
Jeżeli rozdzielasz program na kilka plików, to robisz to po to, aby uporządkować kod. Do innych plików wydzielaj pewne części programu, a nie każdą pojedynczą funkcję.

Będzie Ci bardzo trudno napisać grę dysponując tylko funkcjami. Podział na pliki o którym mowa, jest istotny w programowaniu obiektowym.

Nadmiernym podziałem programu do osobnych plików .cpp możesz znacząco utrudnić sobie pisanie kodu. Jeśli Twoja gra będzie liczyła mniej niż 1000 linii kodu, to spokojnie można to napisać w jednym pliku ;-)
komentarz 26 marca 2016 przez TheFeniks Gaduła (4,690 p.)
Może rodzielanie takiej podstawy jakim jest menu głównego z main to nie jest najlepszy pomysł :).

Dzięki wielki za pomoc ! :D

Podobne pytania

0 głosów
3 odpowiedzi 712 wizyt
pytanie zadane 3 września 2016 w C i C++ przez karmider013 Początkujący (340 p.)
0 głosów
1 odpowiedź 1,122 wizyt
pytanie zadane 24 czerwca 2016 w C i C++ przez DeBos123 Nałogowiec (44,950 p.)
0 głosów
4 odpowiedzi 680 wizyt
pytanie zadane 18 stycznia 2016 w C i C++ przez Seamel Nowicjusz (120 p.)

93,741 zapytań

142,676 odpowiedzi

323,294 komentarzy

63,322 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...