Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: milx86 en 11 Octubre 2014, 19:18 pm



Título: Curiosidad con printf en C
Publicado por: milx86 en 11 Octubre 2014, 19:18 pm
Hola a todos,
Les cuento algo curioso...
Estaba trabajando en un archivo con registros de longitud fija.
Aqui viene lo curioso, estuve desde anoche pensando porque no se mostraba el contenido, revisaba el archivo y si tenia los datos.
Mi codigo era este
Código
  1.        while(fread(&buffer,1,header.recordLength,fd) == 1)
  2.        {
  3.            printf("%d-%s-%s-%s-%s-%d\n",
  4.                   buffer.recordNumber,
  5.                   buffer.firsName,
  6.                   buffer.lastName,
  7.                   buffer.nationality,
  8.                   buffer.DNI,
  9.                   buffer.age);
  10.        }
  11.  
Justo ahora se me ocurrio hacerlo asi, y curiosamente funciono  ;-)
Código
  1. while(fread(&buffer,1,header.recordLength,fd) != NULL)
  2. {
  3.    printf("%d-%s-%s-%s-%s-%d\n",buffer.recordNumber,buffer.firsName,buffer.lastName,buffer.nationality,buffer.DNI,buffer.age);
  4. }
  5.  

Entonces si tengo un registro con 30 campos, tambien tendría que hacer el printf en una sola linea? Alguien sabe porque no funciona de la primera forma (Creo que en c++ y Java si funciona así).
Saludos


Título: Re: Curiosidad con printf en C
Publicado por: engel lex en 11 Octubre 2014, 19:28 pm
yo creo que la diferencia no está en hacerlo en una linea sino en

Código
  1. while(fread(&buffer,1,header.recordLength,fd) == 1)

y
Código
  1. while(fread(&buffer,1,header.recordLength,fd) != NULL)


el salto de linea no debería afectar


Título: Re: Curiosidad con printf en C
Publicado por: milx86 en 11 Octubre 2014, 20:46 pm
yo creo que la diferencia no está en hacerlo en una linea sino en

Se me fue al copiar y pegarXD , te cuento que las dos opciones  son:
Código
  1. while(fread(&buffer,1,header.recordLength,fd) == 1)
Gracias a rir3760 que me explicó lo del fread en un post anterior