Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Fox_Neo en 8 Junio 2012, 01:55 am



Título: Problema con funcion atof
Publicado por: Fox_Neo en 8 Junio 2012, 01:55 am
Hola gracias por leer mi duda, tengo el siguiente código y no consigo compilarlo:
Código
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <cstring>
  4.  
  5. using namespace std;
  6.  
  7. int main(int argc, char *argv[])
  8. {
  9. int a=0;
  10. char dato[80];
  11. cout<<"Introduce algo"<<endl;
  12. cin.get(dato,80,'\n');
  13. while(a<80)
  14. {
  15. if(dato[a]=='2')
  16. {
  17. cout<<atof(dato[a])<<endl;
  18. }
  19. a++;
  20. }
  21. return 0;
  22. }
El error que me da es el siguiente:
Código:
invalid conversion from 'char' to 'const char*'
 initializing argument 1 of 'double atof(const char*)' 

Uso el compilador DevC++ver 4.9.9.3
No entiendo donde está el fallo ya que el siguiente codigo si que lo compila:

Código
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <cstring>
  4.  
  5. using namespace std;
  6.  
  7. int main(int argc, char *argv[])
  8. {
  9. char a_char[10];
  10.  cin>>a_char;
  11.  cout<<"As a float: "<<atof(a_char);
  12. return 0;
  13. }
  14.  
he probado a cargar el valor de dato[a] a otra variable de tipo char, por si la función atof no admitia convertir vectores directamente pero tampoco no funicona :huh:
Salud


Título: Re: Problema con funcion atof
Publicado por: x64core en 8 Junio 2012, 04:12 am
hola, los arrays de caracteres, el puntero es estático por eso no podes pasar el puntero del array pasando una variable como
indice tenes que especificarle al compilador que queres pasarle el puntero de N indice, sino fuera asi estuvieras pasando el valor
del indice y no el puntero:

Código:
cout<<atof( &dato[a] ) <<endl;

bueno lo demás, e dado por caso que ya sabes para que funciona la atof


Título: Re: Problema con funcion atof
Publicado por: Fox_Neo en 8 Junio 2012, 12:10 pm
Gracias por la ayuda algo intuia que podría ser por no usar punteros, pero lo que no entiendo por qué el segundo código si que lo compila y funciona bien si no se usa punteros.

Salu2.


Título: Re: Problema con funcion atof
Publicado por: BlackZeroX en 8 Junio 2012, 16:34 pm
El usar solo elnombre de una array es decir asi como lo usas en el segundo indica un puntero al primer indice es decir  "&variable[0]" es igual a "variable"...

Dulces Lunas!¡.


Título: Re: Problema con funcion atof
Publicado por: Fox_Neo en 9 Junio 2012, 14:20 pm
Gracias por la ayuda ahora si que me compila y mas o menos me hace lo que quiero pero hay un problema, el codigo es el siguiente:
Código
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <cstring>
  4.  
  5. using namespace std;
  6.  
  7. int main(int argc, char *argv[])
  8. {
  9. int a=0;
  10. float res;
  11. char dato[80];
  12. cout<<"Introduce algo"<<endl;
  13. cin.get(dato,80,'\n');
  14. while(a<80)
  15. {
  16. if(dato[a]=='2')
  17. {
  18. res=atof(&dato[a])+5;
  19. cout<<atof(&dato[a])<<endl;
  20. cout<<res<<endl;
  21. }
  22. a++;
  23. }
  24. return 0;
  25. }
Cuando introduzco una serie de carateres por ejemplo
Código:
fdsjñlk2sad
Funciona bien me aparece el 2 y luego 7, pero si introduzco por ejemplo
Código:
dsaf25
el valor que coge es 25 en vez de 2 y no entiendo por qué no coge solo el 2 :huh:

Salu2


Título: Re: Problema con funcion atof
Publicado por: durasno en 9 Junio 2012, 18:46 pm
Hola! atof no convierte un numero en caracter a double, sino que convierte la porcion inicial de la cadena en double, es decir si en la porcion inicial hay numeros consecutivos ("123avc") se va a convertir esos numero como un solo double

Ejemplo cuando vos ingresas esta cadena: "ashf2ieurut26aa"
En primera instancia atof no hace nada ya que  la porcion inicial no es un numero. Luego cuando le pasas la direccion del primer "2" no solo le estas pasando a atof el '2', sino que le estas pasando la cadena: "2ieurut26aa". Aca atof convierte el 2... y finalmente le pasas a atof: "26aa", aca la porcion inicial tiene los numeros "26" por lo tanto convierte ese numero

Saludos


Título: Re: Problema con funcion atof
Publicado por: Fox_Neo en 9 Junio 2012, 22:51 pm
Gracias por la aclaración respecto a la función atof, pero sigo sin entender por qué no funciona correctamente mi codigo, ya que:
Cojo una cadena de caracteres y las introduzco en un vector, cada carácter está introducido en una posición del vector.
Leo el contenido del vector, y si encuentra en una posición del vector un carácter que sea 2  lo convierte a un número, pero lo que viene en la siguiente posición del vector todavia no se sabe porque todavía no ha accedido a ella,por eso solo tendría que convertir lo que está dentro de la posisción del vector, nose si me explico :silbar:

Salu2.


Título: Re: Problema con funcion atof
Publicado por: durasno en 10 Junio 2012, 05:45 am
Es por lo que te dije antes... Si bien vos le pasas la direccion donde hay un '2', no le estas pasando solo el 2 sino que le estas pasando un puntero a esa posicion(por ser un arreglo). Con el ejemplo anterior atof recibe estas cadenas:
"2ieurut26aa" y "26aa", y procesa la parte inicial de la cadena mientras haya un numero

Saludos


Título: Re: Problema con funcion atof
Publicado por: Fox_Neo en 10 Junio 2012, 20:58 pm
Gracias por responder el problema que tengo es que me he dado cuenta que tengo un buen cacao entre strings y arrays ya que creía que el string funcionaba como un array que cada carácter tenia una posición como ocurre con los arrays, para lo que quiero hacer creo que tengo que pasar la cadena de string a un array, voy a ver como lo puedo hacer.
Salu2.