2012-02-02 19 views
6

ठीक है इसलिए मैंने इस कार्यक्रम को मेरे होमवर्क के साथ मेरी मदद करने के लिए बनाया और क्योंकि मैं अपनी सी विशेषज्ञता में सुधार करना चाहता था। जब मैं "gcc file.c -lm" करता हूं तो सबकुछ ठीक से संकलित होता है, लेकिन जब मैं इसे कमांड लाइन पर किसी संख्या के साथ तर्क के रूप में चलाता हूं, तो मेरा प्रोग्राम केवल 70.0000 लौटाता है।कमांड लाइन इनपुट कार्य सही ढंग से

#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); 
} 

उत्तर

7

argv[0] शायद आपका प्रोग्राम नाम है। आप argv[1] चाहते हैं, मुझे उम्मीद है। त्वरित और आसान स्पष्टीकरण के लिए this tutorial देखें।

कि इसके अलावा, वहाँ एक कारण है कि आप atol(3) उपयोग कर रहे हैं और के बजाय double कास्टिंग सिर्फ atof(3) का उपयोग कर जो एक double सीधे आकर है?

+0

क्या आप जानते हैं कि प्रोग्राम नाम हमेशा सरणी में पहला चर क्यों है? ट्यूटोरियल के लिए भी धन्यवाद! – Breedly

+0

मैं ऐतिहासिक कारणों पर टिप्पणी नहीं कर सकता, लेकिन यह निश्चित रूप से व्यस्त बॉक्स जैसे प्रोग्राम के लिए सहायक है जो आपके द्वारा उपयोग किए जाने वाले नाम के आधार पर अलग-अलग चीजें करता है। –

3

याद रखें, कि argv कार्यक्रम शुरू करने के लिए इस्तेमाल तर्क है, जो इस तरह दिखता है:

/path/to/my/exec value 

इसलिए, जब आप कि सरणी, argv[0] के पहले तत्व का उपयोग, आप निम्न तक पहुँच रहे हैं:

:

/path/to/my/exec 

क्या तुम सच में की जरूरत है सरणी, argv[1] का दूसरा तत्व है, जो इस को शामिल करना चाहिए है 210

value 
संबंधित मुद्दे