Solución al error: floating point formats not linked |
|
Escrito por adrianvaca
|
Miércoles, 23 de Marzo de 2011 00:01 |
Imaginemos el siguiente programa:
#include <stdio.h>
struct alumno { char nombre[100]; float promedio; };
int main() { struct alumno miembro[10]; int i, total;
printf("Cuantos alumnos desea ingresar? "); scanf("%d", &total);
for (i=0; i < total; i++) { printf("\nIngrese alumno %d\n", i+1); printf("Nombre: "); scanf("%s", miembro[ i ].nombre); printf("Promedio: "); scanf("%f", &miembro[ i ].promedio); }
getchar(); return 0; } |
Nada extraño, verdad?, pero veamos una ejecución del mismo:
Veamos, el error se produce justo en la línea:
|
scanf("%f", &miembro[ i ].promedio); |
|
Se presenta el mensaje floating point formats not linked e inmediatamente se cierra el programa.
En realidad es un bug en el Turbo C++....
El compilador "trata" de ser inteligente y no enlazará o usará la librería de flotantes a menos que sea necesario, pero como vemos en este caso, no toma la decisión adecuada.
Un caso común es donde no se llama a funciones que usan flotantes, pero si se usa %f en llamadas a printf o scanf.
La solución es hacerle entender al compilador que estamos usando el tipo de dato float, 2 formas de conseguir esto son:
- Colocar las 2 siguientes línea al inicio del programa, justo después de los include:
|
extern unsigned _floatconvert; #pragma extref _floatconvert |
|
- Declarar una función en la que se asigne un dato flotante como:
|
void _bugfix_float(void){ float *bugfix; bugfix = bugfix; } |
|
No importa si llamamos o no a la función, lo importante es declararla, puede ser al inicio del programa. De este modo el compilador "entiende" que estamos usando flotantes y enlazará la librería adecuada.
|