Archivos de texto multiples formatos

Lenguaje C

Aqui hay otro ejemplo de un archivo de texto con multiples formatos:

#define _CRT_SECURE_NO_WARNINGS //Es para que el compilador no de errores

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

typedef struct s_alumnos {
	int id;
	char pregunta[30];
	char opciones[30];
	char respuesta[30]; // 'a' , 'b' o 'c'
    char respuesta_letra;
    int respuesta_puntuaje;

//	int puntaje_alumno; // un numero 1-20
} DATOS;

int leer_pregunta(DATOS datos_leidos[], char filename_func[]) {
    // Devuelve 
      // 0: no pudo abrior el archivo.
      // 1: Se escribio el caracter.

    FILE* fp_func;
    long numero = 0;

    if (fopen_s(&fp_func, filename_func, "r") != 0) {
        printf("No se pudo abrir el archivo %s", filename_func);
        return 0;
    }

//    numero = fscanf(fp_func, "%d %s %s %s ", &(datos_leidos[0].id), datos_leidos[0].pregunta,datos_leidos[0].opciones,datos_leidos[0].respuesta);
    numero = fscanf(fp_func, "%d %s %s %s ", &(datos_leidos[0].id), 
                                datos_leidos[0].pregunta, 
                                datos_leidos[0].opciones,   
                                datos_leidos[0].respuesta);
    // Imprime el formato leida
    printf("\nID: %d", datos_leidos[0].id);
    printf("\nPregunta: %s", datos_leidos[0].pregunta);
    printf("\nOpciones: %s", datos_leidos[0].opciones);
    printf("\nRespuesta: %s", datos_leidos[0].respuesta);

    sscanf(datos_leidos[0].respuesta,"%c,%d", &(datos_leidos[0].respuesta_letra), &(datos_leidos[0].respuesta_puntuaje));
    printf("\nRespuesta letra: %c", datos_leidos[0].respuesta_letra);
    printf("\nRespuesta puntaje: %d", datos_leidos[0].respuesta_puntuaje);

    numero = fclose(fp_func);

    return 1; //exitoso
	
}

int leer_pregunta_todos(DATOS datos_leidos[], char filename_func[]) {
    // Devuelve 
      // 0: no pudo abrior el archivo.
      // 1: Se escribio el caracter.

    FILE* fp_func;
    long numero = 0;
    int contador = 0;

    if (fopen_s(&fp_func, filename_func, "r") != 0) {
        printf("No se pudo abrir el archivo %s", filename_func);
        return 0;
    }

    do {
        numero = fscanf(fp_func, "%d %s %s %s ", &(datos_leidos[contador].id),
            datos_leidos[contador].pregunta,
            datos_leidos[contador].opciones,
            datos_leidos[contador].respuesta);
        // Imprime el formato leida
        printf("\nID: %d", datos_leidos[contador].id);
        printf("\nPregunta: %s", datos_leidos[contador].pregunta);
        printf("\nOpciones: %s", datos_leidos[contador].opciones);
        printf("\nRespuesta: %s", datos_leidos[contador].respuesta);

        sscanf(datos_leidos[contador].respuesta, "%c,%d", &(datos_leidos[contador].respuesta_letra), &(datos_leidos[contador].respuesta_puntuaje));
        printf("\nRespuesta letra: %c", datos_leidos[contador].respuesta_letra);
        printf("\nRespuesta puntaje: %d", datos_leidos[contador].respuesta_puntuaje);
    } while (numero != EOF);
    numero = fclose(fp_func);

    return 1; //exitoso

}

int main()
{
    int resultado = 0;
    static DATOS examen_matematicas[10];

    char nombre_archivo[] = "examen_mat.txt";

    printf("\nLee archivo");

    resultado=leer_pregunta(examen_matematicas, nombre_archivo);

    resultado = leer_pregunta_todos(examen_matematicas, nombre_archivo);

    std::cout << "\nfin chao.!\n";
}

Contenido del archivo examen_mat.txt

1
5+3
8,-3,4
a,3
2
2x5
10,2,-5
a,3

Puede que también te guste...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *