• 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++

Object Storage Arubacloud
0 głosów
776 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 450 wizyt
pytanie zadane 3 września 2016 w C i C++ przez karmider013 Początkujący (340 p.)
0 głosów
1 odpowiedź 909 wizyt
pytanie zadane 24 czerwca 2016 w C i C++ przez DeBos123 Nałogowiec (44,950 p.)
0 głosów
4 odpowiedzi 398 wizyt
pytanie zadane 18 stycznia 2016 w C i C++ przez Seamel Nowicjusz (120 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...