Henrike Postado Dezembro 6, 2009 Denunciar Share Postado Dezembro 6, 2009 Bom dia,Estou com um problema em um exercicio de matriz porem com função, terei uma prova segunda e tenho certeza que caira algo do tipo.#include <stdio.h> #include <stdlib.h> #define linha 3 #define coluna 3 int soma(int[][]); int matriz[linha][coluna]; int main() { int clin, ccol, result; for(clin=0; clin<linha; clin++) { for(ccol=0; ccol<coluna; ccol++) { printf("Digite o valor: "); scanf("%i", &matriz[clin][ccol]); } } result=soma(matriz); printf("O valor da soma da matriz e': %i", result); system("pause"); return 0; } int soma(int matriz[][]) { int result=0, clin, ccol; for(clin=0; clin<linha; clin++) { for(ccol=0; ccol<coluna; ccol++) { result=result+matriz[clin][ccol]; } } return result; } Ele não executa o programa e declara que existe o seguinte erro: o\main.c||In function `soma':| o\main.c|36|error: invalid use of array with unspecified bounds| ||=== Build finished: 1 errors, 0 warnings ===| já tentei de tudo mas não vai, a função deveria somar os valores da matriz e imprimir na função main o erro que ele declara da linha 36 é sobre isso: result=result+matriz[clin][ccol];, se alguém poder me ajudar ficarei muito grato.Abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Mnemonic Postado Dezembro 6, 2009 Denunciar Share Postado Dezembro 6, 2009 Troqueint soma(int[][]);porint soma(int matriz[linha][coluna]);Tanto no protótipo quanto na função.Queria dar uma boa explicação... mas eu não tenho muita certeza. O que eu sei é que o compilador trata esse tipo como um tipo constante. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Henrike Postado Dezembro 6, 2009 Autor Denunciar Share Postado Dezembro 6, 2009 É faz sentido o que você falou, mas ainda continua dando um erro :mellow: Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Durub Postado Dezembro 6, 2009 Denunciar Share Postado Dezembro 6, 2009 Acho que você deveria trocar o nome da variável na função (global = local, embora isso talvez não devesse causar problemas, ou troque a matriz global para local na main) e, talvez, utilizar int **matriz.Porém não tenho muito conhecimento em arrays multidimensionais, além de como são guardadas na memória.Pelo jeito, nunca utilizei.Abraços. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RonaldoRG Postado Dezembro 6, 2009 Denunciar Share Postado Dezembro 6, 2009 Olá Henrike.Eu executei o seu código aqui com a dica do Durub e funcionou. O seu código ficou assim.#include <stdio.h> #include <stdlib.h> #define linha 3 #define coluna 3 int soma(int[linha][coluna]); int matriz[linha][coluna]; int main() { int clin, ccol, result; for(clin=0; clin<linha; clin++) { for(ccol=0; ccol<coluna; ccol++) { printf("Digite o valor: "); scanf("%i", &matriz[clin][ccol]); } } result=soma(matriz); printf("O valor da soma da matriz e': %i", result); system("pause"); return 0; } int soma(int matriz[linha][coluna]) { int result=0, clin, ccol; for(clin=0; clin<linha; clin++) { for(ccol=0; ccol<coluna; ccol++) { result=result+matriz[clin][ccol]; } } return result; }O motivo do erro é porque o compilador precisa saber quanto de memória ele precisa alocar, por isso você deve informar o tamanho da matriz, mesmo quando for passar para uma função.Agora você deveria declarar "matriz[][]" como local em main, não precisava ser global.Abraço. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Henrike
Bom dia,
Estou com um problema em um exercicio de matriz porem com função, terei uma prova segunda e tenho certeza que caira algo do tipo.
Ele não executa o programa e declara que existe o seguinte erro: já tentei de tudo mas não vai, a função deveria somar os valores da matriz e imprimir na função main o erro que ele declara da linha 36 é sobre isso:, se alguém poder me ajudar ficarei muito grato.
Abraço
Link para o comentário
Compartilhar em outros sites
4 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.