2014-12-05 161 views
0

我正在嘗試以秒爲單位存儲用戶輸入,而輸入以分鐘爲單位。如果我輸入0.1,這應該是6秒,因爲0.1分鐘是6秒。當與int相乘時,Double變爲0

但是,由於某種原因,我的代碼導致零。

int main(int argc, char *argv[]) { 
     if (argc != 6) { 
       printf("Not enough arguments!\n"); 
       exit(1); 
     } 

     double sim_time, chance, time_served, sample_time; 
     int num_tellers; 


     sim_time = atoi(argv[1]) * 60; //These are in minute units 
     chance = atoi(argv[2]); 
     num_tellers = atoi(argv[3]); 
     time_served = atoi(argv[4]) * 60; 
     sample_time = atoi(argv[5]) * 60; 

下面是在命令行輸入:./a.out 10 2 3 4 0.1

因此我預計sample_time爲6,但它是0。它可能是一些很愚蠢,但我無法弄清楚。

任何幫助表示讚賞。

回答

2

atoi()簽名是

int atoi(const char *nptr); 

它會返回一個int值,而不是floatdouble。在你的情況下,輸入0.1返回爲0

如果您想要float值,請嘗試atof()

注意:作爲建議,最好在使用argv[n]之前直接檢查NULL

+0

哦,我明白了。那麼有沒有像atoi但返回一個雙或浮動? – mrQWERTY 2014-12-05 06:19:11

+0

@ Renren29使用'atof()'。 – CiaPan 2014-12-05 06:21:22

+0

@ Renren29請參閱我的答案中的編輯。 :-) – 2014-12-05 06:21:32

2

使用atof()而不是atoi()當作用於浮動/ 雙打

atoi()返回整數

atof()回報

關於意見,請貫徹執行:

雙ATOF(爲const char *海峽);

如果有人不知道... doublefloat之間的差異是精確的。

+0

錯了。 'atof()'返回'double',而不是'float'。 – CiaPan 2014-12-05 06:21:46

+0

呃......真的,但函數名是從'float' - ato'f'()。編輯答案要清楚。 – 2014-12-05 06:23:44

+0

'種'...??更精確的說:它返回一個_浮點類型值,但有三種f-p類型定義:float,double和long double,而函數實際返回的是double而不是float。 – CiaPan 2014-12-05 06:36:50