es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Leyendo un archivo de texto en una matriz en C.

Tengo un archivo de texto que contiene datos de 200 x 150 (cada número está separado por un espacio). Estoy tratando de almacenar estos números en una matriz. Mi código es el siguiente:

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

int i,j, matrix[200][150];

void getMatrix(){
    FILE *file;
    file = fopen("PICTURE.txt", "r");
    char *line, *number;
    j = 0;
    while(!feof(file)){
        i = 0;
        fscanf(file, "%s", line);
        number = strtok(NULL, " ");
        while(number!= NULL){
            matrix[i][j] = atoi(number);
        }
        printf("\n");
        j++;
    }
}

void printMatrix(){
    int a, b;
    for(a=0; a<i; a++){="" for(b="0;"></i;><j; b++){
            printf("%d", matrix[a][b]);
        }
        printf("\n");
    }
}

int main(){
    getmatrix();
    printmatrix();
}

no muestra absolutamente nada. no entiendo por qué. ¿cómo puedo corregir mi código o tienes alguna otra sugerencia para volver a escribirlo? b++){=”” printf(“%d”,=”” matrix[a][b]);=”” }=”” printf(“\n”);=”” }=”” }=”” int=”” main(){=”” getmatrix();=”” printmatrix();=”” }=”” “`=”” no=”” muestra=”” absolutamente=”” nada.=”” no=”” entiendo=”” por=”” qué.=”” ¿cómo=”” puedo=”” corregir=”” mi=”” código=”” o=”” tienes=”” alguna=”” otra=”” sugerencia=”” para=”” volver=”” a=””></j; b++){
printf(“%d”, matrix[a][b]);
}
printf(“\n”);
}
}

int main(){
getmatrix();
printmatrix();
}
“`

no muestra absolutamente nada. no entiendo por qué. ¿cómo puedo corregir mi código o tienes alguna otra sugerencia para volver a escribirlo?></string.h></stdlib.h></stdio.h>

Tags:  

Answer

  1. Avatar for davy.ai

    El problema con tu código es que la función strtok() no está siendo llamada correctamente. Le falta el primer argumento, que es la cadena a analizar. Además, la variable “line” no se le asigna nada antes de pasarla a fscanf(). Para solucionar el código, puedes hacer lo siguiente:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int i, j, matrix[200][150];
    
    void getMatrix(){
        FILE *file;
        file = fopen("PICTURE.txt", "r");
        char buffer[10000]; // asumiendo que la longitud máxima de línea es 10000
        char *number;
        j = 0;
        while(fgets(buffer, sizeof(buffer), file) != NULL){
            i = 0;
            number = strtok(buffer, " ");
            while(number!= NULL){
                matrix[i][j] = atoi(number);
                number = strtok(NULL, " ");
                i++;
            }
            j++;
        }
        fclose(file);
    }
    
    void printMatrix(){
        int a, b;
        for(a=0; a<i; a++){="" for(b="0;"></i;><j; b++){
                printf("%d ", matrix[a][b]);
            }
            printf("\n");
        }
    }
    
    int main(){
        getmatrix();
        printmatrix();
        return 0;
    }
    

    en esta versión, usamos fgets() para leer una línea a la vez del archivo y luego usamos strtok() para analizarla en números individuales, que luego son almacenados en la matriz. además, cerramos el archivo después de haber terminado de leerlo. b++){=”” printf(“%d=”” “,=”” matrix[a][b]);=”” }=”” printf(“\n”);=”” }=”” }=”” int=”” main(){=”” getmatrix();=”” printmatrix();=”” return=”” 0;=”” }=”” “`=”” en=”” esta=”” versión,=”” usamos=”” fgets()=”” para=”” leer=”” una=”” línea=”” a=”” la=”” vez=”” del=”” archivo=”” y=”” luego=”” usamos=”” strtok()=”” para=”” analizarla=”” en=”” números=”” individuales,=”” que=”” luego=”” son=”” almacenados=”” en=”” la=”” matriz.=”” además,=”” cerramos=”” el=”” archivo=”” después=”” de=”” haber=”” terminado=”” de=””></j; b++){
    printf(“%d “, matrix[a][b]);
    }
    printf(“\n”);
    }
    }

    int main(){
    getmatrix();
    printmatrix();
    return 0;
    }
    “`

    en esta versión, usamos fgets() para leer una línea a la vez del archivo y luego usamos strtok() para analizarla en números individuales, que luego son almacenados en la matriz. además, cerramos el archivo después de haber terminado de leerlo.></string.h></stdlib.h></stdio.h>

Comments are closed.