Curiosidad con printf en C

Iniciado por milx86, 11 Octubre 2014, 19:18 PM

0 Miembros y 1 Visitante están viendo este tema.

milx86

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

        while(fread(&buffer,1,header.recordLength,fd) == 1)
        {
            printf("%d-%s-%s-%s-%s-%d\n",
                   buffer.recordNumber,
                   buffer.firsName,
                   buffer.lastName,
                   buffer.nationality,
                   buffer.DNI,
                   buffer.age);
        }

Justo ahora se me ocurrio hacerlo asi, y curiosamente funciono  ;-)

while(fread(&buffer,1,header.recordLength,fd) != NULL)
{
    printf("%d-%s-%s-%s-%s-%d\n",buffer.recordNumber,buffer.firsName,buffer.lastName,buffer.nationality,buffer.DNI,buffer.age);
}


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
La abstracción es la clave para lidiar con la complejidad.

engel lex

yo creo que la diferencia no está en hacerlo en una linea sino en

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

el salto de linea no debería afectar
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

milx86

#2
Cita de: engel lex en 11 Octubre 2014, 19:28 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:
while(fread(&buffer,1,header.recordLength,fd) == 1)
Gracias a rir3760 que me explicó lo del fread en un post anterior
La abstracción es la clave para lidiar con la complejidad.