Ejercicio 1 Lab 4

La solución para el ejercicio 1, en palabras simples explicaré cómo funciona lo de los argumentos de linea. Básicamente, la función
main, puede definirse de dos formas:

// Forma 1
int main(void)

// forma 2
int main(int argc, char* argv[])

De la primera forma, no se reciben argumentos de línea. Si se define de la segunda forma, se reciben dos argumentos de línea
los nombres argc y argv son convenciones solamente, la idea es tener un argumento de tipo int y el otro char* argv[]. El argumento argc
es un entero, que básicamente representa la cantidad de argumentos de línea que habrán. Generalmente los programas tienen 1 argumento de
línea, que es el nombre del programa. Para acceder a los argumentos de línea, se puede mediante la siguiente forma:

// Nombre del ejecutable (programa)
argv[0]

// Argumento 1
argv[1]

// Argumento 2
argv[2]

//... Argumento n
argv[n]

Por lo general, es buena práctica prefijar la cantidad de argumentos de línea a usar, y saber para qué se usarán. Por ejemplo, en el caso
del ejercicio 1, sabemos que queremos 1 argumento de línea, que sería el valor n, en este caso, podemos realizar la siguiente condición
para asegurar que el programa se ejecute sólo si se le pasan la cantidad correcta de argumentos de línea:

if (argc != 2)
{
    printf("Debe ingresarse un argumento de linea\n");
    return 1;
}

Cabe destacar que los argumentos de línea no son números, sino que son del tipo char* (de momento omitir qué es esto, aunque son libres de
averiguar qué significa esto). Lo anterior trae como consecuencia la necesidad de transformar el argumento a un entero, ello se logra con la función
atoi (array to int). Existen funciones similares como atof, atol, para más información click aquí

Solución posible del ejercicio 1

#include <stdio.h>
#include <stdlib.h>

int suma_digitos(int n)
{
    int suma = 0;
    while (n > 0)
    {
        suma += n % 10;
        n /= 10;
    }
    return suma;
}

int main(int argc, char* argv[])
{
    // Si la cantidad de argumentos de linea es distinta a la esperada
    if (argc != 2)
    {
        printf("Debe ingresarse 1 argumento de linea\n");
        return 1;
    }

    // Convertir el primer argumento de linea a entero.
    int n = atoi(argv[1]);
    printf("Usted ingreso: %d\n", n);
    printf("La suma de los digitos es: %d\n", suma_digitos(n));

    return 0;
}