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

Problema na execução


rodiisilva

Pergunta

Bom dia, gostaria da ajuda de vocês, pois, meu programa compila, mas não executa corretamente. O código está sem erros, coloquei o "matriz.mtz" na mesma pasta do código para que pudesse compilar direito. O "matriz.mtz" é um documento texto com a qtd de linhas e colunas da matriz e os números componentes da matriz. Alguém pode me ajudar? Obrigado.

#include<stdio.h>
#include<stdlib.h>

int main (void) {
    int l, c, soma = 0;
    int i, j;
    FILE *arq = fopen("matriz.mtz", "r");
    fscanf(arq, "%d %d", &l, &c);
    int mat[l][c];
    for (i = 0; i < l; i++) {
        for (j = 0; j < c; j++) {
            fscanf(arq, "%d", mat[i][j]);
            printf("leu %d\n", mat[i][j]);
        }
    }
    fclose(arq);
    for (i = 0; i < l; i++) {
        for (j = 0; j < c; j++) {
            if ((i == 0) || (i == l - 1) || (j == 0) || (j == l - 1)) {
                  soma += mat[i][j];
            }      
        }
    }
    printf("soma moldura = %d\n", soma);
    
    system("pause");
    
    return 0;
    
}

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Isso aqui tá dando erro de segmentação:

for (i = 0; i < l; i++) {
        for (j = 0; j < c; j++) {
            fscanf(arq, "%d", mat[i][j]);
            printf("leu %d\n", mat[i][j]);
        }
    }
Coloque um & antes do mat[j] no scanf(), para que seja passado o endereço de memória que deve armazenar o valor lido:
for (i = 0; i < l; i++) {
        for (j = 0; j < c; j++) {
            fscanf(arq, "%d", &(mat[i][j]));
            printf("leu %d\n", mat[i][j]);
        }
    }
E tome o cuidado de, sempre que você alocar memória a partir de variáveis pré-existentes, não alterar essas variáveis. Se não me engano um compilador C++ forçaria você a declarar l e c como constantes. Outro modo de fazer matrizes com valores obtidos em runtime é com a alocação dinâmica, o que deixaria o código assim:
(...)
int main (void) {
    int l, c, soma = 0;
    int i, j;
    FILE *arq = fopen("matriz.mtz", "r");
    int **mat;
    fscanf(arq, "%d %d", &l, &c);
    mat = (int **)malloc(sizeof(int *) * l); /* Aloca o espaço para as linhas... */

    for (i = 0; i < l; i++) {
        mat[i] = (int *)malloc(sizeof(int) * c); /* Aloca, dentro de cada linha, o espaço para as colunas. */
        for (j = 0; j < c; j++) {
      fscanf(arq, "%d", &(mat[i][j]));
            printf("leu %d\n", mat[i][j]);
        }
    }
    fclose(arq);
(...)

Editado por == Douplus ==
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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...