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

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");
	}
}




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.

0

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

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