Problem ze zmienną w funkcji oraz poza nią

0

Witam, może od razu przejdę do rzeczy, zrobiłem sobie osobną biblioteke do mojego programu gdzie zawieram wszystkie swoje funkcje i mam problem z jedną rzeczą otóż:

int menu(int a){

while((a>5) || (a<1)){
    cout << "________________________________" << endl;
	cout << "||====== MENU APLIKACJI ======||" << endl;
	cout << "________________________________" << endl;
	cout << "||                            ||" << endl;
	cout << "|| 1. Zgadnij liczbe          ||" << endl;
	cout << "|| 2. Gra Matematyczna        ||" << endl;
	cout << "|| 3. Wisielec                ||" << endl;
	cout << "|| 4. Kalkulator              ||" << endl;
	cout << "|| 5. Wyjscie                 ||" << endl;
	cout << "________________________________" << endl;
	cout << "|| Wybierz aplikacje (1-4)    ||" << endl;
	cout << "________________________________" << endl;
	cout << "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" << endl;
	cout << "==========>> ";
    cin >> a;

    system("cls");

    if((a>5) || (a<1))
    {

    cout << "________________________________" << endl;
	cout << "||======== INFORMACJA ========||" << endl;
	cout << "________________________________" << endl;
	cout << "||                            ||" << endl;
	cout << "||    Aplikacja o podanym     ||" << endl;
	cout << "||    numerze nie istnieje.   ||" << endl;
	cout << "||     Prosze podac numer     ||" << endl;
	cout << "||    z zakresu od 1 do 5.    ||" << endl;
	cout << "________________________________" << endl;
    Sleep(3000);
    system("cls");
    }
return a;
    }
}

To jest funkcja, która ma mi zwrócić wartość w zmiennej a do funkcji main, a nie moge jej wyciągnąć, wiem że musze zrobić albo wskaźnik albo referencje do tego ale nie wiem zbytnio jak, prosze o pomoc, dodaje jeszcze całego int maina

#include <iostream>
#include <windows.h>
#include <ctime>
#include "aplikacjegierka.h"
#include <stdio.h>
using namespace std;
int main()
{
int a;
menu(a);

cout <<a;
getchar();
    switch(a)
{
    case 1:
      cout << "Wypisuje program 1"<<endl;
      zgadnijliczbe();
      break;

      case 2:
      cout << "Wypisuje program 2"<<endl;
      break;

      case 3:
      cout << "Wypisuje program 3"<<endl;
      break;

      case 4:
      cout << "Wypisuje program 4"<<endl;
      break;

      case 5:
     system("quit");
      break;


}


	return 0;
}


0

Nie powinno być tak?

int a = menu(0);
0
lookacode1 napisał(a):

Nie powinno być tak?

int a = menu(0);

Z jakiej racji?

1

Ponieważ funkcja menu zwraca a jako wybor czegos z menu u Ciebie.

0
lookacode1 napisał(a):

Ponieważ funkcja menu zwraca a jako wybor czegos z menu u Ciebie.

Nadal wywala ten sam błąd, czyli w konsoli pojawia sie jakas losowa liczba, gdyz funkcja menu nie przypisuje wartosci a ;(

1

wywołujesz funkcję z niezainicjalizowanym argumentem. Wprowadź dane do a przed wywołaniem funkcji.

1

Boisz się nieskończonej pętli?:)

int menu(){
	int a;
cout << "________________________________" << endl;
    cout << "||====== MENU APLIKACJI ======||" << endl;
    cout << "________________________________" << endl;
    cout << "||                            ||" << endl;
    cout << "|| 1. Zgadnij liczbe          ||" << endl;
    cout << "|| 2. Gra Matematyczna        ||" << endl;
    cout << "|| 3. Wisielec                ||" << endl;
    cout << "|| 4. Kalkulator              ||" << endl;
    cout << "|| 5. Wyjscie                 ||" << endl;
    cout << "________________________________" << endl;
    cout << "|| Wybierz aplikacje (1-4)    ||" << endl;
    cout << "________________________________" << endl;
    cout << "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" << endl;
    
while(1){
	cout << "==========>> ";
    cin >> a;




    if((a>5) || (a<1))
    {

    cout << "________________________________" << endl;
    cout << "||======== INFORMACJA ========||" << endl;
    cout << "________________________________" << endl;
    cout << "||                            ||" << endl;
    cout << "||    Aplikacja o podanym     ||" << endl;
    cout << "||    numerze nie istnieje.   ||" << endl;
    cout << "||     Prosze podac numer     ||" << endl;
    cout << "||    z zakresu od 1 do 5.    ||" << endl;
    cout << "________________________________" << endl;
    continue;

    }
break;
    }
   return a;
}
2
lion137 napisał(a):

...
cout << "|| Wybierz aplikacje (1-4) ||" << endl;
...
cout << "|| z zakresu od 1 do 5. ||" << endl;

Genialne!

1
lion137 napisał(a):

Boisz się nieskończonej pętli?:)

Ale po co zaciemniać kod? Warunek zakończenia pętli jest znany.

bool process_option(int opt)
{
  if (opt == 5)
    return false;
  }
  switch (opt) {
    case 1: /*... */ break;
    case 2: /* ... */ break;
    case 3: /* ... */ break;
    case 4: /* ... */ break;
    default: show_invalid_option_screen(); break;
  }
  return true;
}

int main()
{
  bool show_menu{true};
  while (show_menu) {
    system("cls");
    auto option = menu();
    show_menu = process_option(option);
  }
  return 0;
}
1

http://forum.4programmers.net/1100492
Pod C++ lepiej przerobić na klasy i konstruktory.

0
_13th_Dragon napisał(a):
lion137 napisał(a):

...
cout << "|| Wybierz aplikacje (1-4) ||" << endl;
...
cout << "|| z zakresu od 1 do 5. ||" << endl;

Genialne!
Czy to jest ważne? Prosze skupić się na moim problemie, a nie na głupim dogryzaniu, dzięki ;)
Co do problemu zaraz wszystko przeanalizuje i edytuje post, pozdrawiam.

0

Problem Masz rozwiązany, chociażby w moim poście powyżej, @tajny_agent oraz @_13th_Dragon też podali odpowiedzi.

0
Wayne napisał(a):
_13th_Dragon napisał(a):
lion137 napisał(a):

...
cout << "|| Wybierz aplikacje (1-4) ||" << endl;
...
cout << "|| z zakresu od 1 do 5. ||" << endl;

Genialne!
Czy to jest ważne? Prosze skupić się na moim problemie, a nie na głupim dogryzaniu, dzięki ;)

Tak to bardzo ważne!
Jedna z podstawowych zasad OST (One Source of True) ty masz w małym kawałku kodu cztery razy użytą 5-kę i raz 4-kę (która jest tą 5-1).
Czyli masz 5 źródeł prawdy.
Czyli jak będziesz musiał dołożyć jedną pozycję menu to musisz dokonać zmian w co najmniej pięciu wierszach.

0

@_13th_Dragon Próbuje się nauczyć, ale jest to dla mnie lekko skomplikowane czytałem dzisiaj o tym "One source of true", tylko niezbyt wiem jak to się odnosi do mojego kodu, chce się nauczyć jak najwięcej tylko, że dopiero ledwie co ukończyłem uczyć się podstawy podstaw C++ :)

Dobra zastosowałem prostą referencje, do zamknięcia.

1

One source of true, nie kluczy się z podstawami podstaw, ba jest jedną z nich.
Zrób z tego menu tablicę napisów:

char *menu[]={"pierwzse","drugie","trzecie","czwarte","koniec"};

Do tego stałą określającą jej rozmiar:

size_t /*ewentualnie int*/ menuSize=sizeof(menu)/sizeof(*menu); // Całość dzielimy na rozmiar elementu

Wyświetlasz w pętli z tablicy, chodzi o to żeby w przypadku takiej tablicy w kodzie ta liczba 5 ma się nawet nie pojawić.

0
_13th_Dragon napisał(a):

One source of true, nie kluczy się z podstawami podstaw, ba jest jedną z nich.
Zrób z tego menu tablicę napisów:

char *menu[]={"pierwzse","drugie","trzecie","czwarte","koniec"};

Do tego stałą określającą jej rozmiar:

size_t /*ewentualnie int*/ menuSize=sizeof(menu)/sizeof(*menu); // Całość dzielimy na rozmiar elementu

Wyświetlasz w pętli z tablicy, chodzi o to żeby w przypadku takiej tablicy w kodzie ta liczba 5 ma się nawet nie pojawić.

No dobrze pokombinuje z tym co mi podesłałeś, temat można zamknąć bo to podchodzi pod offtop(?), ewentualnie jeżeli będzie taka możliwość to podpytam na priv.

1 użytkowników online, w tym zalogowanych: 0, gości: 1