valor=10.0*valor+(s[i]-'0')
En primer lugar, hay algún problema con su código. El código correcto es el siguiente:
#include
double atof(. char s[] )
{
doble valor,potencia;
int i, signo;
for(i=0; isspace(s[ i]);i++)
sign=(s[i]=='-'?-1:1);
if(s[i]= ='+' ||s[i]=='-')
i++;
for(val=0.0; isdigit(s[i]); i++) p>
val=10.0*val + (s[i]-'0');
if(s[i] =='.')
i++++;
for(potencia=1.0; isdigit(s[i]); i++)
{
val=10.0*val + (s[i]- '0') ;
potencia*=10.0;
}
signo de retorno*val/potencia;
}
int main()
{
char str[10] = {0};
scanf("%s",str);
printf("%lf\n",atof(str));
}
Además de sus omisiones escritas, hay dos puntos lógicos principales. .
Permítanme presentarles la idea de esta función: convierte una cadena en un tipo de punto flotante. Primero, se eliminan los espacios innecesarios. Los símbolos representan el tiempo positivo y negativo de la conversión. datos de punto flotante., el valor positivo se convierte en 1 y el valor negativo se multiplica por -1, luego extrae la parte del número y lo guarda como un número entero, y registra el número de dígitos después del punto decimal; por el número de dígitos después del punto decimal para obtener el número de dígitos. Finalmente, divide el número por el número de dígitos después del punto decimal para obtener el número de dígitos del número. Divida el número obtenido después de dar forma por el número de dígitos después del punto decimal, como -123,45, el símbolo es -1 y el resultado de la forma es 12345. Luego divida por 100 para obtener 123,45 y luego multiplique por -1 para obtener los datos de punto flotante convertidos.
Hay un problema con la lógica de su código: 1. val = 10.0 * val + val + (s [i] - '0'); [i] -'0'); el propósito es convertir el número en un número entero (este número entero aquí significa poner la cadena con números a la izquierda del punto decimal, porque val es un doble, así que estrictamente hablando no se puede remodelar), como 12: comience con val = 0.0, un ciclo es 1.0 y luego el segundo ciclo es 12.0. Cada vez que se multiplica por 10, es equivalente al número a la izquierda del punto decimal, que. aumenta diez veces; 2, el último El bucle for necesita agregar paréntesis, y power*=10.0 las palabras entre paréntesis indican cuántas veces se multiplica 10 por el número después del punto decimal y el número anterior para formar un número entero; (potencia/10 es el número de dígitos después del punto decimal), espera hasta el final para deshacerte de él.
Para ser más detallado: Por ejemplo, si es 12.350, la primera vez el valor al final del período es val=12, la segunda vez el valor al final del período es val= 12350, potencia = 1000,0 (tres veces 10), luego la última oración es 12350/1000,0 = 12,35.
Estos son lo suficientemente detallados. Haga su propia lista de números, lea junto con el código y lea mentalmente el proceso de ejecución de la computadora, y lo comprenderá ~~~