Nie działająca funkcja - nie wyświetla dalszych instrukcji po dokonaniu wyboru.

2018-12-23 20:04
0

Cześć wszystkim,
Czy mógłby mnie ktoś nakierować dlaczego po wybraniu np Opcja : 1 nie wyświetla się nic? Bez funkcji Menu() program działa jak Pan Bóg przykazał, ale chce go wzbogacić o Menu z funkcjami.
Z GÓRY DZIĘKUJĘ I WESOŁYCH ŚWIĄT!

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <windows.h>
#include "Beep melody.h"
bool spr(char arr[3][3], bool* win);
int Menu(int *choice);
void wypisz(char arr[3][3]);

int Menu(int *choice)
{
    printf("\n------------------- M E N U   W Y B O R U -------------\n\n");
    printf("\t\tCo chcesz zrobic?\n");
    printf("\t\t1. NOWA GRA\n\t\t2.RANKING PUNKTOWY\n\n");
    printf("-------------------------------------------------------\n\n");
    printf("\tOpcja:  ");
    scanf("%d",&choice);
    system("cls");
    return *choice;
}

void wypisz(char arr[3][3])
{
    printf("\t  0   1   2\n");
    printf("\t-------------\n");
    printf("      0");
    printf("\t| %c | %c | %c |\n",arr[0][0],arr[0][1],arr[0][2]);
    printf("\t----+---+----\n");
    printf("      1");
    printf("\t| %c | %c | %c |\n",arr[1][0],arr[1][1],arr[1][2]);
    printf("\t----+---+----\n");
    printf("      2");
    printf("\t| %c | %c | %c |\n",arr[2][0],arr[2][1],arr[2][2]);
    printf("\t-------------\n");
}

bool spr(char arr[3][3], bool *win)
{

    if((arr[0][0]=='X'&& arr[0][1]=='X' && arr[0][2]=='X')|| (arr[1][0]=='X'&& arr[1][1]=='X' && arr[1][2] =='X') || (arr[2][0]=='X'&& arr[2][1]=='X' && arr[2][2]=='X'))
    {
        *win=true;      
    }
    if((arr[0][0]=='O'&& arr[0][1]=='O' && arr[0][2]=='O')|| (arr[1][0]=='O'&& arr[1][1]=='O' && arr[1][2] =='O') || (arr[2][0]=='O'&& arr[2][1]=='O' && arr[2][2]=='O'))
    {
        *win=true;      
    }
    if((arr[0][0]=='X'&& arr[1][0]=='X' && arr[2][0]=='X')|| (arr[0][1]=='X'&& arr[1][1]=='X' && arr[2][1] =='X') || (arr[0][2]=='X'&& arr[1][2]=='X' && arr[2][2]=='X'))
    {
        *win=true;      
    }
     if((arr[0][0]=='O'&& arr[1][0]=='O' && arr[2][0]=='O')|| (arr[0][1]=='O'&& arr[1][1]=='O' && arr[2][1] =='O') || (arr[0][2]=='O'&& arr[1][2]=='O' && arr[2][2]=='O'))
    {
        *win=true;      
    }
    if((arr[0][0]=='X'&& arr[1][1]=='X' && arr[2][2]=='X')|| (arr[0][2]=='X'&& arr[1][1]=='X' && arr[2][0] =='X'))
    {
        *win=true;      
    }
    if((arr[0][0]=='O'&& arr[1][1]=='O' && arr[2][2]=='O')|| (arr[0][2]=='O'&& arr[1][1]=='O' && arr[2][0] =='O'))
    {
        *win=true;      
    }
    return *win;
}

int main()
{
    int choice=0;
    bool win=false;
    char arr[3][3];
        for(int i=0;i<3;i++)
        {
            arr[0][i]=' ';
            arr[1][i]=' ';
            arr[2][i]=' ';
        }
    int x1,x2,y1,y2;
    int kolejka=0;

        Menu(&choice); // <--------------------wywołanie

            if(choice==1)  //<--------------przy wybraniu 1 nic sie nie wyświetla
            {
                printf("\tGRA W KOLKO I KRZYZYYK!\n");
                Sleep(2000);
                printf("\t*****ZACZYNAMY*****");
                Sleep(1000);
                system("cls");
                    wypisz(arr);

    while(win!=true || kolejka == 9)
    {
        printf("KOLKO: Wprowadz wspolrzedne!\n");
        printf("Wiersz:");
        scanf("%d",&x1);
        printf("Kolumna:");
        scanf("%d",&y1);

    kolejka++;
    arr[x1][y1]='O';
     wypisz(arr);

        if(kolejka==9)
    { 
        printf("***** REMIS *****");
            Beep(1567, 200);
            Beep(1567, 200);
            Beep(1567, 200);
            Beep(1244, 1000);
        break;
    }
    spr(arr,&win);
    if(win==true)
    {
        printf("\t*****  Kolko wygral!  *****");
        printf("\n\t\tSPROBUJ JESZCZE RAZ!");

        /*  refrenBass();
            coupleBass();
            refrenBass(); */ //Nie udostępniam tu pliku z tymi funkcjami
        break;
    }

    printf("KRZYZYK: Wprowadz wspolrzedne!\n");
    printf("Wiersz:");
    scanf("%d",&x2);
    printf("Kolumna:");
    scanf("%d",&y2);

    kolejka++;
    arr[x2][y2]='X';
     wypisz(arr);

    spr(arr,&win);
    if(win==true)
    {
        printf("\t*****  Krzyzyk wygral!  *****");
        printf("\n\t\tSPROBUJ JESZCZE RAZ!");
        /*  refrenBass();
            coupleBass();
            refrenBass(); */ //do melody.h

        break;
    }
  }
}
    else if(choice==2)
    {
        printf("Ranking");
    }
}
edytowany 1x, ostatnio: Kamila Nowak, 2018-12-23 20:05

Pozostało 580 znaków

2018-12-23 20:12
3

Do Menu przekazujesz wskaźnik na int, a potem wewnątrz robisz z tego znowu wskaźnik, więc masz UB.
Wywal ampersand.

Kompilator na pewno ostrzega o potencjalnym błędzie.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
Niestety, nie ostrzega. - Kamila Nowak 2018-12-23 20:33
Ok, czyli wyrzucić & z wywołania Menu, tak? - Kamila Nowak 2018-12-23 20:37

Pozostało 580 znaków

2018-12-23 20:50
0

Już rozumiem, serdeczne dzięki!
Spokojnych świąt @MarekR22! :)

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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