elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  serie de numeros en fichero
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: serie de numeros en fichero  (Leído 1,408 veces)
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
serie de numeros en fichero
« en: 23 Septiembre 2013, 22:37 »

Saludos tengo el siguiente codigo que mediante un for me tiene que imprimir 1000 numeros inversamente ordenados en un archivo con el mismo nombre, el problema es que me imprime basura en el archivo y no tengo idea de por que??

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.    int i;
  7.    FILE *fd;
  8.    if((fd = fopen("F:\\1000-Inversamente Ordenados.txt","w"))!=NULL)
  9.    {
  10.        for(i=1000;i > 0;i--)
  11.        {
  12.            fwrite(&i,sizeof(int),1,fd);
  13.            fwrite("\n",sizeof(int),1,fd);
  14.        }
  15.  
  16.    }
  17.    else
  18.       printf("No se pudo crear el archivo");
  19.    return 0;
  20. }
  21.  

de antemano gracias


En línea

xiruko


Desconectado Desconectado

Mensajes: 437


Ver Perfil
Re: serie de numeros en fichero
« Respuesta #1 en: 23 Septiembre 2013, 23:11 »

No sé si de esta manera funcionará, supongo que sí:

Código
  1. fwrite("\n", sizeof(char), 1, fd);

Y sino, una manera que seguro que funciona para escribir cadenas constantes en un archivo:

Código
  1. fputs("\n", fd);

Saludos


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: serie de numeros en fichero
« Respuesta #2 en: 24 Septiembre 2013, 03:45 »

Te imprime basura porque fwrite espera una cadena de caracteres... y tu le estas pasando un int.

Hablando en binario.

el número 1000 en texto se representa de la siguiente forma: 0x31 0x30 0x30 0x30

es decir, 4 caracteres que representan 1 uno seguido de 3 ceros.

el número 1000 en notación binaria se codifica tal que 0x00 0x00 0x03 0xE8 ... se parecen como un huevo a una castaña

Lo que te sucede, por si no ha quedado claro, es que tú le estás pasando 0x00 0x00 0x03 0xE8 y es eso jústamente lo que está escribiendo en el archivo... obviamente 0x00 y 0x03 no son caracteres legibles... y 0xE8 es cualquier cosa menos un número, de ahi que tú solo seas capaz de ver basura.

Tu estás esperando que fwrite sea capaz, por ciencia infusa, de saber que tú le estás pasando un int y que además quieres que lo convierta a char... mala suerte, fwrite no es tan listo.

Si quieres que ese número sea legible tendrás que convertirlo antes a cadena de caracteres. deberias mirarte la función itoa, por ejemplo.

Un saludo.
En línea

xiruko


Desconectado Desconectado

Mensajes: 437


Ver Perfil
Re: serie de numeros en fichero
« Respuesta #3 en: 24 Septiembre 2013, 05:58 »

También puedes usar sprintf para preparar la cadena a escribir y luego pasarla al archivo:

Código
  1. char cadena[MAX];
  2. for (i=1000; i>0; i--) {
  3.    memset(cadena, '\0', MAX);
  4.    sprintf(cadena, "%d\n", i);
  5.    fwrite(cadena, sizeof(char), strlen(cadena), fd);
  6. }

Saludos
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: serie de numeros en fichero
« Respuesta #4 en: 24 Septiembre 2013, 06:14 »

tengo el siguiente codigo que mediante un for me tiene que imprimir 1000 numeros inversamente ordenados en un archivo con el mismo nombre, el problema es que me imprime basura en el archivo y no tengo idea de por que??
Como ya te comento eferion el texto en el archivo, si lo abres con un editor de texto, es ilegible porque la función fwrite imprime sin formato: se envía al archivo la secuencia de bytes tal cual están en memoria.

Cuando utilizas fwrite para escribir en el archivo debes utilizar fread para leer de nuevo los valores:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define NOM_ARCHIVO  "Entrada.txt"
  5. #define MAX  5
  6.  
  7. int main(void)
  8. {
  9.   FILE *stream;
  10.   int i;
  11.  
  12.   if ((stream = fopen(NOM_ARCHIVO, "wb")) != NULL){
  13.      for (i = MAX; i > 0; i--)
  14.         fwrite(&i, sizeof(int), 1, stream);
  15.      fclose(stream);
  16.  
  17.      if ((stream = fopen(NOM_ARCHIVO, "rb")) != NULL){
  18.         while (fread(&i, sizeof(int), 1, stream) == 1)
  19.            printf("%d\n", i);
  20.         fclose(stream);
  21.      }else {
  22.         perror(NOM_ARCHIVO);
  23.         return EXIT_FAILURE;
  24.      }
  25.   }else {
  26.      perror(NOM_ARCHIVO);
  27.      return EXIT_FAILURE;
  28.   }
  29.  
  30.   return EXIT_SUCCESS;
  31. }

O bien puedes utilizar fprintf para enviar al archivo los valores como texto con formato, en ese caso la lectura la realizas con fgets, fscanf, etc., dependiendo de los datos enviados.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
obtener la media de una serie de números
Programación C/C++
minette1988 4 2,912 Último mensaje 23 Junio 2010, 03:17
por nicolas_cof
Ayuda en extraer numeros (coordenadas x,y) de un fichero .txt en C
Programación C/C++
RicGeo 2 3,257 Último mensaje 13 Agosto 2014, 22:59
por RicGeo
DESPLEGAR SERIE DE NUMEROS
Programación C/C++
codelau21 2 709 Último mensaje 3 Noviembre 2015, 04:06
por Zodiak98
Serie de numeros en C
Programación C/C++
acer-x 2 387 Último mensaje 16 Mayo 2018, 15:42
por acer-x
Ayuda sobre factor comunde una serie de numeros
Hacking Básico
jabrajam 0 332 Último mensaje 7 Abril 2020, 16:20
por jabrajam
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines