Jump to content
Fórum Script Brasil
  • 0

Problema na execução


rodiisilva

Question

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 to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 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);
(...)

Edited by == Douplus ==
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
      152.2k
    • Total Posts
      652k
×
×
  • Create New...