Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

miguel__1

[Resolvido] Passar dois valores por função

Recommended Posts

miguel__1

Boas malta, queria que uma função enviasse dois elementos então pensei em utilizar os ponteiros. O código que tenho é:

#include <stdio.h>
#include <string.h>
#include <time.h>
void tabuleiro(int* linhas_tab, int* colunas_tab)
{
int r, op, vez = 0, check = 0, tab;
//inicio definição das dimensoes do tabuleiro
srand(time(NULL));
r = rand() % 2; // codigo para definir aleatoriamente qual é o jogador que define as dimensoes do tabuleiro, para nao ser sempre o mesmo
if (r==1)
	printf("\n	Jogador A a definir as dimensoes do Tabuleiro!\n\n");
else
	printf("\n	Jogador B a definir as dimensoes do Tabuleiro!\n\n");

//vez = 0;
do{ // ciclo para aceitar as dimensoes do tabuleiro dentro das dimensoes permitidas
	printf("\nNº Colunas(6-10): ");
	scanf(" %d", &colunas_tab);
	if(colunas_tab >= 11 || colunas_tab <= 5 ) // condição para aceitar
			printf("\nNº Colunas Erradas, Inserir novamente!\n\n");
	else
		{
				printf("Nº Colunas Validas\n\n");
				 colunas_tab++;
				 check = 1;
		}
}while(check != 1);  // ao inserir valor valido, já nao será possivel alterar este campo
 do{ // ciclo para aceitar as dimensoes do tabuleiro dentro das dimensoes permitidas
	printf("\nNº Linhas(4-8): ");
	scanf(" %d", &linhas_tab);
		check = 0;
		if (linhas_tab < 4 || linhas_tab > 8 ) // condição para aceitar
			printf("Nº Linhas Erradas, Inserir novamente!");
		else if(linhas_tab >= colunas_tab)  // comparação para caso o nº de linhas ser maior que o de colunas, volta a pedir novamente o nº de linhas for maior que o de colunas
			printf("Dimensoes Invalidas! O numero de colunas tem que ser maior ao de linhas!");
		else
		{
				printf("Dimensoes Validas\n\n");
				linhas_tab++;
				check = 1;
		}
}while(check != 1);
}

void novo_jogo(int linhas, int colunas)
{
char tabuleiro[linhas][colunas];
int j,i;
 //NUMERAÇÃO DAS COLUNAS
if(colunas-1==10)
{
 tabuleiro[0][1]='A';
 tabuleiro[0][2]='B';
 tabuleiro[0][3]='C';
 tabuleiro[0][4]='D';
 tabuleiro[0][5]='E';
 tabuleiro[0][6]='F';
 tabuleiro[0][7]='G';
 tabuleiro[0][8]='H';
 tabuleiro[0][9]='I';
 tabuleiro[0][10]='J';
}else if(colunas-1==9)
{
 tabuleiro[0][1]='A';
 tabuleiro[0][2]='B';
 tabuleiro[0][3]='C';
 tabuleiro[0][4]='D';
 tabuleiro[0][5]='E';
 tabuleiro[0][6]='F';
 tabuleiro[0][7]='G';
 tabuleiro[0][8]='H';
 tabuleiro[0][9]='I';
}else if(colunas-1==8)
{
 tabuleiro[0][1]='A';
 tabuleiro[0][2]='B';
 tabuleiro[0][3]='C';
 tabuleiro[0][4]='D';
 tabuleiro[0][5]='E';
 tabuleiro[0][6]='F';
 tabuleiro[0][7]='G';
 tabuleiro[0][8]='H';
}else if(colunas-1==7)
{
 tabuleiro[0][1]='A';
 tabuleiro[0][2]='B';
 tabuleiro[0][3]='C';
 tabuleiro[0][4]='D';
 tabuleiro[0][5]='E';
 tabuleiro[0][6]='F';
 tabuleiro[0][7]='G';
}else if(colunas-1==6)
{
 tabuleiro[0][1]='A';
 tabuleiro[0][2]='B';
 tabuleiro[0][3]='C';
 tabuleiro[0][4]='D';
 tabuleiro[0][5]='E';
 tabuleiro[0][6]='F';
}
//NUMERAÇÃO DAS LINHAS
 if(linhas-1==8)
 {
  tabuleiro[1][0]='1';
  tabuleiro[2][0]='2';
  tabuleiro[3][0]='3';
  tabuleiro[4][0]='4';
  tabuleiro[5][0]='5';
  tabuleiro[6][0]='6';
  tabuleiro[7][0]='7';
  tabuleiro[8][0]='8';
 }else if(linhas-1==7)
 {
  tabuleiro[1][0]='1';
  tabuleiro[2][0]='2';
  tabuleiro[3][0]='3';
  tabuleiro[4][0]='4';
  tabuleiro[5][0]='5';
  tabuleiro[6][0]='6';
  tabuleiro[7][0]='7';
 }else if(linhas-1==6)
 {
  tabuleiro[1][0]='1';
  tabuleiro[2][0]='2';
  tabuleiro[3][0]='3';
  tabuleiro[4][0]='4';
  tabuleiro[5][0]='5';
  tabuleiro[6][0]='6';
 }else if(linhas-1==5)
 {
  tabuleiro[1][0]='1';
  tabuleiro[2][0]='2';
  tabuleiro[3][0]='3';
  tabuleiro[4][0]='4';
  tabuleiro[5][0]='5';
 }else if(linhas-1==4)
 {
  tabuleiro[1][0]=' 1';
  tabuleiro[2][0]=' 2';
  tabuleiro[3][0]=' 3';
  tabuleiro[4][0]=' 4';
 }

 //PREENCHE A TABELA COM OS *
 for (j = 1; j < linhas; j++)
	for (i = 1; i < colunas; i++)
		tabuleiro[j][i] = '*';

	tabuleiro[0][0]=' '; //Coloca o espaço em branco no 1º quadrado
	tabuleiro[linhas-1][colunas-1]='X'; //Coloca o veneno no ultimo quadrado
//MOSTRA A TABELA NO ECRA
for (j = 0; j < linhas; j++) {
	for (i = 0; i < colunas; ++i)
	printf("  %2c   |", tabuleiro[j][i]);
	printf("\n");
}
}
int main()
{
int linhas, colunas;//falta inicializar as variáveis
tabuleiro(&linhas, &colunas);
novo_jogo(linhas, colunas);
}

Mas quando sai da função tabuleiro e vai para a função novo_jogo os valores não são os que vem da função tabuleiro :confused:

Como faço pra que apareçam os valores que vem na func tabuleiro?

Edited by miguel__1

Share this post


Link to post
Share on other sites
HappyHippyHippo

epa ... de certeza que tens mensagens de compilação !!!

tens argumentos da função tabuleiro como ponteiros e depois andas a usar essas variáveis como não o fossem ...

  • Vote 1

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
PsySc0rpi0n

epa ... de certeza que tens mensagens de compilação !!!

tens argumentos da função tabuleiro como ponteiros e depois andas a usar essas variáveis como não o fossem ...

Referes-te a isto, certo?

void tabuleiro(int* linhas_tab, int* colunas_tab)

E depois

linhas_tab++;
colunas_tab++;

  • Vote 1

Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Share this post


Link to post
Share on other sites
miguel__1

epa ... de certeza que tens mensagens de compilação !!!

tens argumentos da função tabuleiro como ponteiros e depois andas a usar essas variáveis como não o fossem ...

Então como faço? É que não consigo mesmo... :(

Share this post


Link to post
Share on other sites
seuqram

Ao fazeres isso: if (linhas_tab < 4)

Estás a verificar se o endereço é menor que 4 e não o valor que está a ser apontado pelo mesmo.

Tal como aqui: linhas_tab++;

Imagina que alguém te diz para ires entregar uma encomenta á porta 2. Ao fim de teres entregue a encomenda, a casa fica com mais uma encomenda.

Mas o que estás a fazer é aumentar o endereço e dirigires-te á porta 3.

Para fazeres o que queres, tens de meter '*' atrás do ponteiro, para acessares ao valor apartir do endereço e assim o poderes verificar e/ou aumentar.

if (*linhas_tab < 4)

*linhas_tab++;

Share this post


Link to post
Share on other sites
miguel__1

Ao fazeres isso: if (linhas_tab < 4)

Estás a verificar se o endereço é menor que 4 e não o valor que está a ser apontado pelo mesmo.

Tal como aqui: linhas_tab++;

Imagina que alguém te diz para ires entregar uma encomenta á porta 2. Ao fim de teres entregue a encomenda, a casa fica com mais uma encomenda.

Mas o que estás a fazer é aumentar o endereço e dirigires-te á porta 3.

Para fazeres o que queres, tens de meter '*' atrás do ponteiro, para acessares ao valor apartir do endereço e assim o poderes verificar e/ou aumentar.

if (*linhas_tab < 4)

*linhas_tab++;

Continua a rebentar depois de inserir os valores....

Share this post


Link to post
Share on other sites
seuqram

Tens ai scanf's (que pedem ponteiros como argumentos) e estás a meter endereços de ponteiro.

scanf(" %d", &colunas_tab);

Assim o scanf muda o ponteiro em si e não o valor que está a apontar.

Mete isto:

scanf(" %d", colunas_tab);

Edited by seuqram
  • Vote 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.