Guest EcKS Postado Novembro 18, 2005 Denunciar Share Postado Novembro 18, 2005 Olá! Estou tendo um problema ao tentar mandar uma matriz de caracteres para uma função. Crio tal matriz no main e quero utiliza-la na função. Ex: funcao(char matriz){ ... } main(){ char matriz[j]; ... funcao(matriz); } Obtenho este erro de compilação: "[Warning] passing arg 1 of `funcao' from incompatible pointer type ". Como resolve-lo? alguém pode me ajudar? Segue meu programa:#include <stdio.h>#define LIM 99int direcao(char matrix[0][0],int limite_lin, int limite_col, int in_lin, int in_col, int out_lin, int out_col){ matrix[in_lin][in_col] = 'C'; int i=0,j=0; int linha,coluna,aux1,aux2; linha=in_lin; coluna=in_col; /* Direita */ if(((matrix[linha][coluna+1] == '.') || (matrix[linha][coluna+1] == 'C')) && coluna<limite_col){ matrix[linha][coluna] = 'C'; i=linha; j=coluna+1; if(matrix[j] == 'C') matrix[j] = 'X'; direcao(matrix,limite_lin,limite_col,i,j,out_lin,out_col); if((i == out_lin) && (j == out_col)){ for(aux1=0; aux1<limite_lin; aux1++){ for(aux2=0; aux2<limite_col; aux2++){ if(matrix[aux1][aux2] == 'X') matrix[aux1][aux2] = '.'; } } for(aux1=0; aux1<limite_lin; aux1++){ for(aux2=0; aux2<limite_col; aux2++){ printf("%c", matrix[aux1][aux2]); } printf("\n"); } } } /* Baixo */ if(((matrix[linha+1][coluna] == '.') || (matrix[linha+1][coluna] == 'C')) && linha<limite_lin){ matrix[linha][coluna] = 'C'; i=linha+1; j=coluna; if(matrix[j] == 'C') matrix[j] = 'X'; direcao(matrix,limite_lin,limite_col,i,j,out_lin,out_col); if((i == out_lin) && (j == out_col)){ for(aux1=0; aux1<limite_lin; aux1++){ for(aux2=0; aux2<limite_col; aux2++){ if(matrix[aux1][aux2] == 'X') matrix[aux1][aux2] = '.'; } } for(aux1=0; aux1<limite_lin; aux1++){ for(aux2=0; aux2<limite_col; aux2++){ printf("%c", matrix[aux1][aux2]); } printf("\n"); } } } /* Esquerda */ if(((matrix[linha][coluna-1] == '.') || (matrix[linha][coluna-1] == 'C')) && coluna>0){ matrix[linha][coluna] = 'C'; i=linha; j=coluna-1; if(matrix[j] == 'C') matrix[j] = 'X'; direcao(matrix,limite_lin,limite_col,i,j,out_lin,out_col); if((i == out_lin) && (j == out_col)){ for(aux1=0; aux1<limite_lin; aux1++){ for(aux2=0; aux2<limite_col; aux2++){ if(matrix[aux1][aux2] == 'X') matrix[aux1][aux2] = '.'; } } for(aux1=0; aux1<limite_lin; aux1++){ for(aux2=0; aux2<limite_col; aux2++){ printf("%c", matrix[aux1][aux2]); } printf("\n"); } } } /* Cima */ if(((matrix[linha-1][coluna] == '.') || (matrix[linha-1][coluna] == 'C')) && linha>0){ matrix[linha][coluna] = 'C'; i=linha-1; j=coluna; if(matrix[j] == 'C') matrix[j] = 'X'; direcao(matrix,limite_lin,limite_col,i,j,out_lin,out_col); if((i == out_lin) && (j == out_col)){ for(aux1=0; aux1<limite_lin; aux1++){ for(aux2=0; aux2<limite_col; aux2++){ if(matrix[aux1][aux2] == 'X') matrix[aux1][aux2] = '.'; } } for(aux1=0; aux1<limite_lin; aux1++){ for(aux2=0; aux2<limite_col; aux2++){ printf("%c", matrix[aux1][aux2]); } printf("\n"); } } } } main(){ int linhas,colunas,in_lin,in_col,out_lin,out_col; int i,j; char matriz[LIM][LIM]; /* Entrada */ printf("Digite o número de linhas do labirinto: "); scanf("%d", &linhas); printf("Digite o número de colunas: "); scanf("%d", &colunas); printf("Digite a linha i da entrada do labirinto: "); scanf("%d", &in_lin); printf("Digite a coluna j da entrada do labirinto: "); scanf("%d", &in_col); printf("Digite a linha i da saída do labirinto: "); scanf("%d", &out_lin); printf("Digite a coluna j da saída do labirinto: "); scanf("%d", &out_col); printf("\nDigite o mapa do labirinto. Utilize: "); printf("\n>Pontos (.) para representar caminho e;"); printf("\n>Tralhas (#) para representar as paredes.\n"); /* Leitura do Mapa */ for(i=0; i<linhas; i++){ for(j=0; j<colunas; j++){ scanf(" %c", &matriz[j]); } } /* Chamando DIRECAO */ direcao(matriz,linhas,colunas,in_lin,in_col,out_lin,out_col); getch();} Simplesmente C...não é C++! Valeu! EcKS Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Guest Postado Novembro 18, 2005 Denunciar Share Postado Novembro 18, 2005 Wicker Man plz help me! XD Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Wicker Man Postado Novembro 18, 2005 Denunciar Share Postado Novembro 18, 2005 Opa!Para passar arrays bidimensionais para funções você deve, no protótipo da função, informar o quantas colunas têm no array dessa forma:void print( int array[][ num_colunas ] ); No seu caso ficaria: int direcao( char matrix[][ LIM ], int limite_lin, int limite_col, int in_lin, int in_col, int out_lin, int out_col );Sacou? Até mais! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Guest Postado Novembro 18, 2005 Denunciar Share Postado Novembro 18, 2005 AHHH GAROTO!!! Valeu!!! Yahhhhooooooo! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Guest EcKS
Olá!
Estou tendo um problema ao tentar mandar uma matriz de caracteres para uma função. Crio tal matriz no main e quero utiliza-la na função.
Ex: funcao(char matriz){
...
}
main(){
char matriz[j];
...
funcao(matriz);
}
Obtenho este erro de compilação: "[Warning] passing arg 1 of `funcao' from incompatible pointer type ". Como resolve-lo? alguém pode me ajudar?
Segue meu programa:
#include <stdio.h>
#define LIM 99
int direcao(char matrix[0][0],int limite_lin, int limite_col, int in_lin, int in_col, int out_lin, int out_col){
matrix[in_lin][in_col] = 'C';
int i=0,j=0;
int linha,coluna,aux1,aux2;
linha=in_lin;
coluna=in_col;
/* Direita */
if(((matrix[linha][coluna+1] == '.') || (matrix[linha][coluna+1] == 'C')) && coluna<limite_col){
matrix[linha][coluna] = 'C';
i=linha;
j=coluna+1;
if(matrix[j] == 'C')
matrix[j] = 'X';
direcao(matrix,limite_lin,limite_col,i,j,out_lin,out_col);
if((i == out_lin) && (j == out_col)){
for(aux1=0; aux1<limite_lin; aux1++){
for(aux2=0; aux2<limite_col; aux2++){
if(matrix[aux1][aux2] == 'X')
matrix[aux1][aux2] = '.';
}
}
for(aux1=0; aux1<limite_lin; aux1++){
for(aux2=0; aux2<limite_col; aux2++){
printf("%c", matrix[aux1][aux2]);
}
printf("\n");
}
}
}
/* Baixo */
if(((matrix[linha+1][coluna] == '.') || (matrix[linha+1][coluna] == 'C')) && linha<limite_lin){
matrix[linha][coluna] = 'C';
i=linha+1;
j=coluna;
if(matrix[j] == 'C')
matrix[j] = 'X';
direcao(matrix,limite_lin,limite_col,i,j,out_lin,out_col);
if((i == out_lin) && (j == out_col)){
for(aux1=0; aux1<limite_lin; aux1++){
for(aux2=0; aux2<limite_col; aux2++){
if(matrix[aux1][aux2] == 'X')
matrix[aux1][aux2] = '.';
}
}
for(aux1=0; aux1<limite_lin; aux1++){
for(aux2=0; aux2<limite_col; aux2++){
printf("%c", matrix[aux1][aux2]);
}
printf("\n");
}
}
}
/* Esquerda */
if(((matrix[linha][coluna-1] == '.') || (matrix[linha][coluna-1] == 'C')) && coluna>0){
matrix[linha][coluna] = 'C';
i=linha;
j=coluna-1;
if(matrix[j] == 'C')
matrix[j] = 'X';
direcao(matrix,limite_lin,limite_col,i,j,out_lin,out_col);
if((i == out_lin) && (j == out_col)){
for(aux1=0; aux1<limite_lin; aux1++){
for(aux2=0; aux2<limite_col; aux2++){
if(matrix[aux1][aux2] == 'X')
matrix[aux1][aux2] = '.';
}
}
for(aux1=0; aux1<limite_lin; aux1++){
for(aux2=0; aux2<limite_col; aux2++){
printf("%c", matrix[aux1][aux2]);
}
printf("\n");
}
}
}
/* Cima */
if(((matrix[linha-1][coluna] == '.') || (matrix[linha-1][coluna] == 'C')) && linha>0){
matrix[linha][coluna] = 'C';
i=linha-1;
j=coluna;
if(matrix[j] == 'C')
matrix[j] = 'X';
direcao(matrix,limite_lin,limite_col,i,j,out_lin,out_col);
if((i == out_lin) && (j == out_col)){
for(aux1=0; aux1<limite_lin; aux1++){
for(aux2=0; aux2<limite_col; aux2++){
if(matrix[aux1][aux2] == 'X')
matrix[aux1][aux2] = '.';
}
}
for(aux1=0; aux1<limite_lin; aux1++){
for(aux2=0; aux2<limite_col; aux2++){
printf("%c", matrix[aux1][aux2]);
}
printf("\n");
}
}
}
}
main(){
int linhas,colunas,in_lin,in_col,out_lin,out_col;
int i,j;
char matriz[LIM][LIM];
/* Entrada */
printf("Digite o número de linhas do labirinto: ");
scanf("%d", &linhas);
printf("Digite o número de colunas: ");
scanf("%d", &colunas);
printf("Digite a linha i da entrada do labirinto: ");
scanf("%d", &in_lin);
printf("Digite a coluna j da entrada do labirinto: ");
scanf("%d", &in_col);
printf("Digite a linha i da saída do labirinto: ");
scanf("%d", &out_lin);
printf("Digite a coluna j da saída do labirinto: ");
scanf("%d", &out_col);
printf("\nDigite o mapa do labirinto. Utilize: ");
printf("\n>Pontos (.) para representar caminho e;");
printf("\n>Tralhas (#) para representar as paredes.\n");
/* Leitura do Mapa */
for(i=0; i<linhas; i++){
for(j=0; j<colunas; j++){
scanf(" %c", &matriz[j]);
}
}
/* Chamando DIRECAO */
direcao(matriz,linhas,colunas,in_lin,in_col,out_lin,out_col);
getch();
}
Simplesmente C...não é C++!
Valeu! EcKS
Link para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.