Problema con funcion atof

Iniciado por Fox_Neo, 8 Junio 2012, 01:55 AM

0 Miembros y 1 Visitante están viendo este tema.

Fox_Neo

Hola gracias por leer mi duda, tengo el siguiente código y no consigo compilarlo:
Código (cpp) [Seleccionar]
#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:

Código (cpp) [Seleccionar]
#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 :huh:
Salud

x64core

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

Fox_Neo

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.

BlackZeroX

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!¡.
The Dark Shadow is my passion.

Fox_Neo

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 (cpp) [Seleccionar]
#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 fdsjñlk2sad Funciona bien me aparece el 2 y luego 7, pero si introduzco por ejemplodsaf25 el valor que coge es 25 en vez de 2 y no entiendo por qué no coge solo el 2 :huh:

Salu2

durasno

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
Ahorrate una pregunta, lee el man

Fox_Neo

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.

durasno

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
Ahorrate una pregunta, lee el man

Fox_Neo

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.