Ir para conteúdo
Fórum Script Brasil
  • 0

Problema Ao Passar Vetor Na Função


fernando_ott

Pergunta

Olá Pessoal. Um problema muito estranho, mas ao passar a matriz por referencia para a função, ele não compila, mostrando o seguinte erro

in function 'criamatriz'

invalid use of array with unspecified bounds

Pra mim a sintaxe esta correta, alguém sabe como resolver o problema?

#include <stdio.h>

void criamatriz(double mat[][],int n)
{
     int i,j;
     for (i=0;i<n;i++)
         for (j=0;j<n;j++){
             printf("Elemento [%d][%d]",i,j);
             scanf("%lf",&mat[i][j]);
             getchar();
             }
}

main()
{
      int tam;
      
      puts("Soma de matrizes.\n\nEntre com o tamanho das matrizes quadradas");
      scanf("%d",&tam);
      getchar();
      
      double matriz[tam][tam],soma[tam][tam];
      puts("Entre com os elementos da 1 matriz");
      criamatriz(matriz,tam);
      puts("Entre com os elementos da 2 matriz");
      criamatriz(soma,tam);
}

Editado por rajneesh
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Opa!

Cara, ao passar um array multidimensional para uma função, você deve fornecer também os valores de todos os subscritos do array, exceto o primeiro (ou melhor, o primeiro não é obrigatório). Ou seja, na sua função criamatriz você deveria passar a variável mat da seguinte forma:

void criamatriz( double mat[][ 6 ] )

O número 6 que coloquei acima é apenas um exemplo; você deverá substituir pelo valor correto da dimensão correspondente.

Isso ocorre desta forma porque, dado que um array de qualquer dimensão é armazenado de forma seqüencial (um elemento após o outro) na memória, o compilador precisa dos outros subscritos para definir as posíções onde cada elemento deverá ser armazenado.

Boa sorte!

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Wicker.

Vlw a resposta, assim da certo.

A dúvida que ficou é, eu tenho que continuar a fazer isso mesmo com alocação dinâmica, pois esse programa ele tem que ser originalmente tem q ser feito por alocação.

Se eu passar por ponteiro seria assim o correto?

void criamatriz( double **mat )
Editado por fernando_ott
Link para o comentário
Compartilhar em outros sites

  • 0

/*cara já q você tem q aprender alocação dinamica, vou te da um toque bacana.

passar as parada q você precisa pra uma função tem q ser com ponteiro. Não tem pra onde corre.

Criando um tipo de dado "typedef" tudo fica melhor pra passar o que você deseja pra dentro das suas funções

Se desejar outra ajuda é só colocar ai q quando eu tiver tempo eu te ajudo

*/

#include <stdio.h>

#include<stdlib.h>

#include<conio.h>

typedef struct

{

int matriz[10][10];

int a,b;

}mat;

void criamatriz(mat *fernando_ott)

{

printf("o valor da linha\n");

scanf("%d",&fernando_ott->a);

printf("o valor da coluna\n");

scanf("%d",&fernando_ott->b);

for (int i=0;i<fernando_ott->a;i++)

{

for (int j=0;j<fernando_ott->b;j++)

{

printf("Elemento [%d][%d]\n",i+1,j+1);

scanf("%d",&fernando_ott->matriz[j]);

}

}

}

void mostra(mat *fernando_ott)

{

printf("\n");

for (int i=0;i<fernando_ott->a;i++)

{

for (int j=0;j<fernando_ott->b;j++)

{

printf("Elemento [%d][%d]\n",i+1,j+1);

printf("%d\n",fernando_ott->matriz[j]);

}

}

getch();

}

int main()

{

mat fernando_ott;

criamatriz(&fernando_ott);

mostra(&fernando_ott);

}

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...