Jump to content
Fórum Script Brasil
  • 0

Problema Ao Passar Vetor Na Função


fernando_ott

Question

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

Edited by rajneesh
Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 )
Edited by fernando_ott
Link to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152k
    • Total Posts
      651.5k
×
×
  • Create New...