Solución al error: floating point formats not linked Imprimir
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].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.

 
Otros artículos