Ir para o conteúdo
  • 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

Mensagens Recomendadas

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?

Editado por miguel__1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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 ...

  • Voto 1

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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++;

  • Voto 1

Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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... :(

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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++;

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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....

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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);

Editado por seuqram
  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.