2012-02-02 10 views
6

Bien, así que hice este programa para ayudarme con mi tarea y porque quería mejorar mi experiencia en C. Todo compila bien cuando hago "gcc file.c -lm", pero cuando lo ejecuto con un número en la línea de comando como argumento, mi programa solo devuelve 70.0000.Entrada de línea de comandos que funciona incorrectamente

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


double temp(double hour){ 
    double t = (3.14/12)*hour; 
    double c = cos((double)t); 
    double temp = 13 * c + 57; 
    return temp; 
} 

int main (int argc, char *argv[]){ 
    double temperature = temp((double)atol(argv[0])); 

    printf("%f\n", temperature); 
} 

Respuesta

7

argv[0] es probablemente el nombre de su programa. Quiere argv[1], lo espero. Consulte this tutorial para una explicación rápida y fácil.

Además de eso, hay una razón que está utilizando atol(3) y echando a double vez de utilizar atof(3) que devuelve un double directamente?

+0

¿Sabe por qué el nombre del programa siempre es la primera variable en la matriz? ¡Gracias por el tutorial también! – Breedly

+0

No puedo comentar por razones históricas, pero es seguro que es útil para un programa como busybox que hace cosas diferentes según el nombre que usas para invocarlo. –

3

Recuerde, que argv son los argumentos utilizados para poner en marcha el programa, que es como la siguiente:

/path/to/my/exec value 

Por lo tanto, cuando se accede al primer elemento de esa matriz, argv[0], se accede a la siguiente:

/path/to/my/exec 

lo que realmente necesita es el segundo elemento de la matriz, argv[1], que debe contener lo siguiente:

value 
Cuestiones relacionadas