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.

¿Hay algún problema de codificación?

Estoy tratando de escribir estos parámetros en un archivo .txt, pero cuando abro el archivo (incluso antes de que me muestre una advertencia sobre la codificación) parece como un error, lleno de ????, como esto:

$�U�z�G��?xpto%�U\���(\�?xpto&�Uףp=
��?xpto'�UR���Q�?xpto(�U�������?xpto)�UH�z�G�?xpto*�U��(\���?xpto+�U>
ףp=�?xpto,�U���Q��?xpto-�U433333�?xpto

He buscado mucho al respecto, pero como es un error específico, no puedo encontrar nada al respecto.
¿Qué está sucediendo?

“`cpp
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

typedef struct
{
int age;
double height;
char name[64];
} Person;

void printPersonInfo(Person *p)
{
printf("Person: %s, %d, %f\n", p->name, p->age, p->height);
}

int main (int argc, char *argv[])
{
FILE *fp = NULL;
int i;
Person p = {35, 1.65, "xpto"};

<pre><code>/* Validar número de argumentos */
if(argc != 2)
{
printf("USO: %s nombreArchivo\n", argv[0]);
return EXIT_FAILURE;
}

/* Abrir el archivo proporcionado como argumento */
errno = 0;
fp = fopen(argv[1], "w");
if(fp == NULL)
{
perror ("¡Error al abrir el archivo!");
return EXIT_FAILURE;
}

/* Escribir 10 elementos en un archivo */
for(i = 0; i < 10; i++)
{
p.age = p.age+1;
p.height = p.height+0.03;
fwrite(&p, sizeof(Person), 1, fp);
}

fclose(fp);

return EXIT_SUCCESS;
</code></pre>

}
“`</errno.h></stdlib.h></stdio.h>

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema probablemente se debe a la función fwrite() utilizada en el código. Esta función escribe datos binarios en un archivo, pero el contenido de la estructura Person no necesariamente está en un formato que pueda ser fácilmente comprendido por un editor de texto. Los símbolos ??? en el archivo sugieren que los datos se están interpretando incorrectamente.

    Para escribir datos en un formato que sea más fácilmente legible por un editor de texto, es necesario convertir los datos en una cadena antes de escribirlos en el archivo. Una forma de hacer esto es utilizando funciones de salida formateada como fprintf() en lugar de fwrite(). Por ejemplo, la función printPersonInfo() podría modificarse para escribir los datos en un archivo en lugar de imprimirlos en la consola:

    void writePersonInfo(FILE *fp, Person *p)
    {
        fprintf(fp, "Person: %s, %d, %f\n", p->name, p->age, p->height);
    }
    
    ...
    
    /* Escribir 10 elementos en un archivo utilizando salida formateada */
    for(i = 0 ; i < 10 ; i++)
    {    
        p.age = p.age+1;
        p.height = p.height+0.03;
        writePersonInfo(fp, &p);
    }
    

    Este código escribirá los datos en el archivo en formato de texto sin formato, lo cual puede ser fácilmente leído y comprendido por un editor de texto.

Comments are closed.