Wątek przeniesiony 2019-01-02 11:56 z Newbie przez Adam Boduch.

Budowanie menu? Switch w switchu?

0

Witam, dopiero od dwóch miesięcy programuję, buduję takie proste menu i mam problem czy switch może występować w switchu a jeśli tak to dlaczego mi nie działa? no i jako trzecią opcję chciałabym wrócić do menu głównego, ale nie mam pojęcia jak to zrobić, wszystko ma być w C, a nie C++

printf("MENU GLOWNE\n");
printf("Wpisz cyfre od 1 do 3\n");
printf("Liczby odpowiednio oznaczaja\n 1-obliczenia latwe \n 2-obliczenia trdniejsze \n 3-wyjscie\n\n");

opcja=getchar();

switch(opcja)
{
    case '1': printf("Wpisz dwie liczby x, y \na nastepnie wybierz odpowiednia opcje\n\n"); 
    printf("Wpisz x:"); 
    scanf("%f",&x); 
    printf("Wpisz y:"); 
    scanf("%f",&y); 
    printf(" x: %f, y: %f\n\n",x,y);
    printf("Wpisz cyfre od 1 do 3\n");
    printf("liczby odpowiednio oznaczaja: \n1-dodawanie x+y\n2-odejmowanie x-y\n3-powrot do menu glownego\n\n");
    opcja_1=getchar();
    switch(opcja_1)
    {
        case '1':
        float suma;
        suma=x+y;
        printf("x+y=%f",suma);

                    case '2':
        float roznica;
        roznica=x-y;
        printf("x-y=%f",roznica);

                    case '3':
    }

}

getch();
return 0;

}

0

oczywiscie, ze mozesz miec switch w switchu.

Najpierw przerob sobie progrma tak by kazdy warunek w switchu (a raczej to co ma sie wykonac) niech bedzie funkcja

switch(wybor)
{
case 1:
  funkcja1();
  break;
case 2:
  funkcja2()
  break;
case 3:
 ...
default:
 ...
}

ponazywaj funkcje tak by oddawaly to co robia

teraz jezeli chcesz by to menu zawsze sie wyswietlalo. To zrob w okol tego petle while(1). Jezeli bedziesz chciala wrocic do glownego menu. Po prostu zakonczysz dzialanie jakies funkcji i wyswietli sie automatycznie menu. Jezeli chcesz wyjsc z petli, to niech funkcja zwraca czy kontynuowac prace czy nie. wtedy zamiast while(1) bedziesz miec while(inProgress)

tutaj troszke szerzej o tym co napisalem wyzej
http://fasadin.4programmers.n[...]rawnianie-programow-cz-1.html

0

nie wiem czy robię to poprawnie ale nadal program zamyka się kiedy chcę wybierać kolejne opcje

float wpisywanie(float x,float y)
{
    char opcja_1;
    printf("Wpisz dwie liczby x, y \na nastepnie wybierz odpowiednia opcje\n\n"); 
    printf("Wpisz x:"); 
    scanf("%f",&x); 
    printf("Wpisz y:"); 
    scanf("%f",&y); 
    printf(" x: %f, y: %f\n\n",x,y);
    printf("Wpisz cyfre od 1 do 3\n");
    printf("liczby odpowiednio oznaczaja: \n1-dodawanie x+y\n2-odejmowanie x-y\n3-powrot do menu glownego\n\n");
    opcja_1=getchar();
}

float f1(float x,float y)
    {
    float suma;
    suma=x+y;
    printf("x+y=%f",suma);
    }   

float f2(float x,float y)
        {
        float roznica;
        roznica=x-y;
        printf("x-y=%f",roznica);
        }

int main ()

{
char opcja;
char opcja_1;
int opcja_2;
float a,b,x,y;

printf("MENU GLOWNE\n");
printf("Wpisz cyfre od 1 do 3\n");
printf("Liczby odpowiednio oznaczaja\n 1-obliczenia latwe \n 2-obliczenia trdniejsze \n 3-wyjscie\n\n");

opcja=getchar();

switch(opcja)
{
    case '1': wpisywanie(a,b);
    switch(opcja_1)
    {
        case '1': f1(a,b);

        case '2': f2(a,b);
    }

}

getch();
return 0;

}

screenshot-20181231141803.png

0

a gdzie return w tych funkcjach?

0
Aniula23 napisał(a):

float f1(float x,float y)
{
float suma;
suma=x+y;
printf("x+y=%f",suma);
}

zmienna suma, do której coś przypisujesz, ale po zakończeniu funkcji to coś jest niedostępne
a funkcje deklarujesz jako zwracającą wartość float
poczytaj najpierw o funkcjach zanim zaczniesz je pisać

0

A to on ci się skompilował w ogóle? xD
w końcu w funkcjach nie ma return :x... lel

Twój program robi:
1) Odpala się
2) Prosi o parę rzeczy ( wiem jak działa getch ale co dokładnie robi scanf to nie do końca xD )
3) wypier*** wszystko w kosmos co pobrał od użytkownika
4) wykonuje switcha w switchu - i ignoruje go bo poprzedni switch który odpalił "wpisywanie(a,b);" nic nie zwraca... lel
5) czeka na podanie guziora
6) zamyka sie...

struct Data{
    double x,y;

    int opcja;
}MyData;

bool wpisywanie(Data &in)
{
    printf("Podaj dwie liczby (x,y): ");
     printf("Wpisz x: ");
     scanf("%f",&in.x);

    printf("Wpisz y: ");
     scanf("%f",&in.y);

    printf("Podaj nr. akcji!");
     printf("1 - dodawanie");
     printf("2 - odejmowanie");
     printf("3 - mnozenie");
     printf("4 - dzielenie");
    in.opcja=getchar();

    return true;    // Jeśli udało się wykonać funkcje
}

bool f1(Data &in){
    if( printf(in.x + in.y) )return true;
        else return false;}

bool f2(Data &in){
    if( printf(in.x - in.y) )return true;
        else return false;}

bool f3(Data &in){
    if( printf(in.x * in.y) )return true;
        else return false;}

bool f4(Data &in){
    if( printf(in.x / in.y) )return true;
        else return false;}

int main ()
{
printf("MENU GLOWNE\n");
printf("Wpisz cyfre od 1 do 3\n");
printf("Liczby odpowiednio oznaczaja\n 1-obliczenia latwe \n 2-obliczenia trdniejsze \n 3-wyjscie\n\n");

MyData.opcja=getchar();

switch(MyData.opcja)
{
    case '1': wpisywanie(MyData);
    switch(MyData.opcja)
    {
        case '1': f1(MyData); break;
        case '2': f2(MyData); break;
        case '3': f3(MyData); break;
        case '4': f4(MyData); break;
    }

}
    getch();
return 0;
}

Masz... nie wiem czy zadziała ale przetestuj i jak zadziała to po-analizuj sobie :D

btw. mój kot ma na imię Nicole xD

//Edit:
pewnie zostawiłem kilka błędów jeszcze to ktoś może ci poprawi albo może sam znajdziesz błędy z kompilatorem :)...

//Edit2:
w ogóle takie coś to sie da bez tego switcha zrobić :P
można po prostu dać tablice funkcji xD jakoś tak sie to robiło:
bool (*Fc)(<argumenty>) = { f1, f2, f3, f4 };

a potem np.

printf( Fc[getch()](wpiszX(),wpiszY()) );
lel xD

egh specjalnie dla cb odpale sobie CB i potestuje z C++ xD
//Edit3:
ni uja :c nawet z cin-em miałem jakieś 5 minutowe problemy xD
nie używam już tych publicznych chyba ze JS albo CSS więc się pozapominało z C++ :(
std::cin(Int);
std::cin -> Int;
std::Int = cin; // nie wiem co sobie tu myślałem xD lol

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