Soy un programador de Python aprendiendo C del libro K & R. Esto parecerá una pregunta tremendamente trivial, pero estoy perplejo de todos modos. A continuación se incluye un fragmento de código del libro K & R (RIP Ritchie!) Que implementa la función atoi().Comprender una función de atoi()
atoi(s) /*convert s to integer */
char s[];
{
int i, n, sign;
for (i=0; s[i]==' '||s[i] == '\n' || s[i] == '\t'; i++)
; /* skip whitespace */
sign = 1;
if (s[i] == '+' || s[i] = '-') /* sign */
sign = (s[i++] == '+') ? 1 : -1;
for (n=0; s[i] >= '0' && s[i] <= '9'; i++)
n = 10 * n + s[i] - '0';
return (sign * n);
}
Mis preguntas:
1) ¿La primera 'para' bucle sirve a ningún propósito además de contar el número de characaters válido?
2) Si (1) es verdadero, el primer ciclo establece el valor de 'i' en el número de caracteres válidos. ¿Cómo funciona el segundo ciclo for sin restablecer i en 0?
Digamos, por ejemplo, que ingreso '2992' como entrada a la función. El primero para el ciclo establece de i a 3, entonces, ¿cómo funciona el resto de la función? Es posible que todos mis conocimientos básicos estén mal, pero cualquier ayuda sería muy apreciada. Gracias, -Craig
No sabía que C es _that_ terrible. –
Creo que la mejor manera de entender un fragmento de código es ejecutarlo con un depurador (por ejemplo, gdb) y avanzar paso a paso. También puede ser útil leer el código y los comentarios en el interior. – eyalm
@PatrickB .: eso es _muy antiguo_ C. Modern C parece ... exactamente igual :) (excepto la firma de función que ahora es mucho más clara 'int atoi (const char * s)'.) – Mat