Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Transofmar un char a float en C

Estas en el tema de Transofmar un char a float en C en el foro de C/C++ en Foros del Web. Hola y saludos a todos: Tengo un problemita, hice un programa que guarda datos numericos en un archivo de texto(.txt), mi problema es que cuando ...
  #1 (permalink)  
Antiguo 08/09/2009, 14:11
 
Fecha de Ingreso: septiembre-2009
Mensajes: 22
Antigüedad: 14 años, 7 meses
Puntos: 0
Exclamación Transofmar un char a float en C

Hola y saludos a todos:
Tengo un problemita, hice un programa que guarda datos numericos en un archivo de texto(.txt), mi problema es que cuando intento leer mi archivo, C lo lee como char intente cambiarle al tipo float pero me da un numero no correspondiente, como puedo hacer para que el numero escrito en el archivo se vuelva float.

Este es mi codigo:
Código PHP:
#include <stdio.h>
main(){
FILE *arfopen ("nombre.txt" ,"r");
char buffer[100];
float ser;
fscanf(ar"%s" ,buffer);
ser = (charbuffer;
float s = (ser);
printf("%f"ser);
fclose(ar);
getch();

GRACIAS DE ANTEMANO.
  #2 (permalink)  
Antiguo 08/09/2009, 14:15
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Respuesta: Transofmar un char a float en C

Mensaje movido al foro de C/C++ desde CSS.

Saludos,
  #3 (permalink)  
Antiguo 08/09/2009, 15:10
Avatar de Anubis_Slash  
Fecha de Ingreso: mayo-2009
Ubicación: aqui y haya
Mensajes: 173
Antigüedad: 15 años
Puntos: 5
Respuesta: Transofmar un char a float en C

Código:
#include <stdio.h>
main(){
FILE *ar= fopen ("nombre.txt" ,"r");
char buffer[100];
float ser;
fscanf(ar, "%s" ,buffer);
ser = atof(buffer); //aqui es donde se modifica
printf("%f", ser);
fclose(ar);
getch();
}
intenta este codigo, simplemente modifique a utilizar el atof
__________________
Bienvenidos los karmas.
Quejas, sugerencias o dudas, se awantan......
  #4 (permalink)  
Antiguo 08/09/2009, 15:21
 
Fecha de Ingreso: septiembre-2009
Mensajes: 22
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Transofmar un char a float en C

No, no me funciono si tengo supongamos un cuatro en el archivo nombre.txt el programa me imprime 9373640.000000
  #5 (permalink)  
Antiguo 08/09/2009, 16:14
Avatar de Anubis_Slash  
Fecha de Ingreso: mayo-2009
Ubicación: aqui y haya
Mensajes: 173
Antigüedad: 15 años
Puntos: 5
Respuesta: Transofmar un char a float en C

hola stilua

tal vez lo qu esta haciendo mal es que no lee el archivo que le estas dando o probablemente este en otra parte el error, por que no intentas hacerlo manualmente para que veas si funciona el atof....

si esta mal porque no nos compartes el archivo y la ubicacion exacta donde lo guardas para hacer pruebas

saludos
__________________
Bienvenidos los karmas.
Quejas, sugerencias o dudas, se awantan......
  #6 (permalink)  
Antiguo 08/09/2009, 16:38
 
Fecha de Ingreso: septiembre-2009
Mensajes: 22
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Transofmar un char a float en C

Ok probe haciendo lo siguiente:
Código PHP:
#include <stdio.h>
main(){char rt;
float numero;
gets(&rt);
numero atof(&rt);
printf("%f"numero);
getch();} 
Este programa se supone que debe de responder con el mismo numero que el usuario ingrese ¿No?, o bien si no es asi porfavor prodiras crear un programa que devuelva el mismo numero que se intrudusca (como lo intente hacer arriba). Es decir que pida un char, ese char se transforme a float y ese float se imprima.
  #7 (permalink)  
Antiguo 08/09/2009, 22:12
 
Fecha de Ingreso: septiembre-2009
Ubicación: Burgos
Mensajes: 28
Antigüedad: 14 años, 8 meses
Puntos: 1
Respuesta: Transofmar un char a float en C

Tienes toda la razón, la función atof( ) de por sí no funciona como debería puesto que la precisión de un float no es tan exacta como debiera, pero no por la función en sí, sino por la precisión del float. Aun así lo que está claro es que en tu código no va ni a leerse dicha función porque no has incluido la librería <stdlib.h> que es la que la contiene. Además deberías declarar una cadena de carácteres y no un carácter.

Código c:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. int main(){char rt[20];
  5. float numero;
  6. gets(rt);
  7. numero = atof(rt);
  8. printf("%f", numero);
  9. return 0;}

Así no tendrás ni warnings en compilación y funciona "bien". Si ya declaras double en vez de float a "numero" tendrás mucha más precisión, pero a altos niveles pierde exactitud ya te digo. Vale, diréis, "son sólo decimales", ¿pero si luego quieres ese float para multiplicarlo por algo? He hecho en un momentín una implementación y también pierde exactitud, más que nada para ver si era cosa del atof( ) (función que para nada conocía) o de almacenamiento, y queda claro que es de almacenamiento, te la dejo por site interesa saber qué hace atoaf( ) (porque me imagino que esto será lo que hace).

Código c:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4.  
  5. int main(){
  6.     char rt[20];
  7.     double num = 0.0, aux;
  8.     int i, j, k;
  9.     gets(rt);
  10.    
  11.     /*Nos vamos hasta el último carácter antes de la coma o el punto.*/
  12.     /*En caso de que sea un entero, vamos hasta el final del número.*/
  13.     for(i=0, j=1; rt[i]>47 && rt[i]<58; ++i);
  14.    
  15.     /*Guardamos la parte entera del número.*/
  16.     for(k=i-1; k>-1; --k, j*=10)
  17.         num = num + (rt[k]-48)*j;
  18.        
  19.     /*Si estamos en coma o el punto, hay parte decimal, si no, no.*/
  20.     if(rt[i]==',' || rt[i]=='.'){
  21.         ++i;
  22.         for(k=1; rt[i]!='\0'; ++k, ++i){
  23.             aux = rt[i] - 48;
  24.             for(j=0; j<k; ++j)
  25.                 aux = aux * 0.1;
  26.             num = num + aux;
  27.         }
  28.     }
  29.    
  30.     printf("%f", num);
  31.     getch();
  32. return 0;
  33. }

Última edición por JuanLVBR; 08/09/2009 a las 22:16 Razón: Error en declaración de tipos.
  #8 (permalink)  
Antiguo 10/09/2009, 12:50
 
Fecha de Ingreso: septiembre-2009
Mensajes: 22
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Transofmar un char a float en C

Gracias funciona bien, pero como comentaste si introdusco un numero de varias cifras me pierde calidad en las ultimas cifras, no hay algo para evitar eso y sea exactamente el mismo numero que se introduce al que se devuelva.
  #9 (permalink)  
Antiguo 11/09/2009, 06:52
 
Fecha de Ingreso: septiembre-2009
Ubicación: Burgos
Mensajes: 28
Antigüedad: 14 años, 8 meses
Puntos: 1
Respuesta: Transofmar un char a float en C

Cita:
Iniciado por stilua Ver Mensaje
mi problema es que cuando intento leer mi archivo, C lo lee como char intente cambiarle al tipo float pero me da un numero no correspondiente, como puedo hacer para que el numero escrito en el archivo se vuelva float.
El problema es eso, que tú quieres que el número sea un float, así que la precisión es la que hay, la que define el float, ante eso no se puede hacer nada.


Si no te importa tenerlo en algo que no sea un float o double sí hay solución, podrías almacenar el número en una cadena de carácteres tan grande como quieras (y puedas) y no se perdería nada de precisión en absoluto. El problema es que sería similar a declarar un nuevo tipo de datos, y ese tipo de datos no tiene las operaciones básicas definidas, tendrías que crearte la operación suma (en la que deberías sumar carácter a carácter la parte entera y la decimal, "me llevo una", etc. y almacenarlo en otra cadena de carácteres), la resta, la multiplicación y demás (si es que las necesitas).

Como ves la idea es algo laboriosa, pero una vez definidas esas operaciones no es para nada mala solución.
  #10 (permalink)  
Antiguo 11/09/2009, 08:41
Avatar de sax82  
Fecha de Ingreso: octubre-2005
Mensajes: 6
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Transofmar un char a float en C

joder JuanLVBR pero qué bien se te da esto de programar, pájaro ;)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:36.