C fprintf's y floats

Khanser

Buenas, vengo con una duda, que lo mas seguro sea lo mas tonto del mundo, pero yo estoy rallado.

a ver, yo tengo por ejemplo esto:

float a;
float a[2];

a = 3.21
a[0] = a;

fprintf(stderr," %f %f",a,a[0]);

y la salida por el standard error me da:

3.210000 0.000000

Se debe mostrar diferente el elemento de un array que el de una variable? Esque no entiendo. Si es un array de floats, se deberia mostrar bien no?

PD: Hago fprintf porque depuro al acabar el programa, no me interesa que vayan saliendo mensajitos mientras estoy con el programa, asi que lo miro luego.

javithelong

Te compila nombrando a 2 variables con el mismo nombre?? que cosas...

PD: prueba cambiando el nombre de una de las 2, y así a simple vista debería funcionar

Khanser

No, a ver en realidad eso no es <_< realmente tienen otros nombres, era por poner un ejemplo, pero se me fue la olla y nombré a las 2 como "a", ponle al array "b".

Es un tema de paso de mensajes entre procesos, creo un array de floats, y lo mando a la cola de mensajes de un buzón determinado, al extraerlo desde otro proceso, la inserción es de una variable llamada "ident" que es un entero, lo convierto a float lo meto en el array:

mensaje[0] = (float)ident;

y cuando recupero el mensaje, hago un fprintf para ver que hay dentro-> fprintf(stderr,"%f",mensaje[0]); y me sale 0.0000000 siempre, claro, esta es una conversion de int a float, pro lo que si convierto el mensaje[0] a int, ya sale bien, pero esque en el mensaje, paso otros floats, que no eran originalmente ints, por lo que necesito saber que valor tienen exactamente en formato float.

Espero haberme explicado correctamente :/

LOc0

He probado:

float numeros[2], numero;

numeros[0]=numero=7.345678;

fprintf(stderr, "%f %f\n\n", numeros[0], numero);

[/i]

y efectivamente me saca:

7.345678 7.345678

Es un tema de paso de mensajes entre procesos, creo un array de floats, y lo mando a la cola de mensajes de un buzón determinado, al extraerlo desde otro proceso, la inserción es de una variable llamada "ident" que es un entero, lo convierto a float lo meto en el array:

Pon más código de esa parte porque el "fallo" está ahí fijo.

Salu2 ;)

Khanser

aham, ya veo, entonces, si un elemento de un array de floats, no se comporta como deberia, es un problema de escritura de ese valor :/.

Pero, en mi codigo, al hacer el fprintf, salia mal, pero al meter ese valor en una variable float, (a veces) sale bien :/

javithelong

Eso de 'a veces' me hace mucha gracia xD

A ver, las variables son variables, da igual el tipo (a un nivel más bajo) son exactamente lo mismo, sean el tipo que sean.

Lo que cambia es cómo interpretas esa variable, esto es, si lees/escribes una variable como un float, como un int o como un boolean (si, un float es lo mismo que un char). De aquí se deduce que los castings a tipos simples (float, int, char etc) no son necesarios, solo sirven para quitarse warnings en compilación.

¿A donde quiero llegar con esto? a que el error está en lo que hagas entre medias con tus mensajes, igual tienes algun puntero revilao que te toca memoria que no quieres, pierdes algún índice, alocas memoria mal... no se, hay algo raro. No es por hacer un fprintf de una cosa u otra.

En fin, si pones más detalles, pos igual hay suerte y viene L0c0 y te pone el código del programa que intentas hacer porque "lo tenía por ahi" (guiño guiño :P), o hay más suerte y no lo tiene por ahí y aprendes a hacerlo tu.

Un saludo

PD: Ahora me vendran los puristas a decir que pierdes precisión con castings y tal por el número de bytes que ocupan en memoria unos tipos u otros y blablabla, pero bueno, la idea es lo que hay ahí escrito.

LOc0

#6
xDDDDDDDDDDDD

Vale, vale, pero hay algunos a los que nos cuesta menos escribirle 3 líneas de fast-C que redactar un post con 4 párrafos + posdata xD

Salu2 ;)

Khanser

Vale, el puto paso de mensajes era. Habia que pasarle a la funcion el tamaño del mensaje alterado:

tamaño de(nº de elementos +1)

No me acordé del +1 que era el elemento centinela, asi que accedia a donde no se debia XDDD

Gracias por vuestro tiempo :)

PD: LOc0 al final tenias razon con que el problema estaba en el paso de los mensajes XD Lo tipico que cuando llevas horas picando codigo ya no ves una mierda.

Usuarios habituales

  • Khanser
  • LOc0
  • javithelong