Autor
|
Tema: Problema con funcion atof (Leído 4,954 veces)
|
Fox_Neo
Desconectado
Mensajes: 234
|
Hola gracias por leer mi duda, tengo el siguiente código y no consigo compilarlo:#include <cstdlib> #include <iostream> #include <cstring> using namespace std; int main(int argc, char *argv[]) { int a=0; char dato[80]; cout<<"Introduce algo"<<endl; cin.get(dato,80,'\n'); while(a<80) { if(dato[a]=='2') { cout<<atof(dato[a])<<endl; } a++; } return 0; }
El error que me da es el siguiente: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:#include <cstdlib> #include <iostream> #include <cstring> using namespace std; int main(int argc, char *argv[]) { char a_char[10]; cin>>a_char; cout<<"As a float: "<<atof(a_char); return 0; }
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 Salud
|
|
|
En línea
|
|
|
|
x64core
Desconectado
Mensajes: 1.908
|
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: cout<<atof( &dato[a] ) <<endl; bueno lo demás, e dado por caso que ya sabes para que funciona la atof
|
|
|
En línea
|
|
|
|
Fox_Neo
Desconectado
Mensajes: 234
|
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.
|
|
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
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!¡.
|
|
|
En línea
|
The Dark Shadow is my passion.
|
|
|
Fox_Neo
Desconectado
Mensajes: 234
|
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:#include <cstdlib> #include <iostream> #include <cstring> using namespace std; int main(int argc, char *argv[]) { int a=0; float res; char dato[80]; cout<<"Introduce algo"<<endl; cin.get(dato,80,'\n'); while(a<80) { if(dato[a]=='2') { res=atof(&dato[a])+5; cout<<atof(&dato[a])<<endl; cout<<res<<endl; } a++; } return 0; }
Cuando introduzco una serie de carateres por ejemplo Funciona bien me aparece el 2 y luego 7, pero si introduzco por ejemplo el valor que coge es 25 en vez de 2 y no entiendo por qué no coge solo el 2 Salu2
|
|
|
En línea
|
|
|
|
durasno
Desconectado
Mensajes: 373
|
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
|
|
|
En línea
|
Ahorrate una pregunta, lee el man
|
|
|
|
durasno
Desconectado
Mensajes: 373
|
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
|
|
|
En línea
|
Ahorrate una pregunta, lee el man
|
|
|
Fox_Neo
Desconectado
Mensajes: 234
|
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.
|
|
|
En línea
|
|
|
|
|
|