2016-04-30 144 views
2

我有一個函數,它添加給定的參數並打印結果。如何更改數據類型c

對於整數,根本沒有問題。用atoi改變字符串參數 - > int。
例如:./main 3 4 5將打印12.

但是,如果我有./main 4.5 6 5.5?我該如何在C中執行類似操作?函數如何「看」,它現在必須將參數類型改爲float?

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

int main(int argc, char* argv[]) 
{ 
    int i , sum = 0; 
    for(i=1; i < (argc); ++i) 
    sum += atol(argv[i]); 
    printf("%d\n", sum); 

    return 0; 

} 

回答

4

,沒有重載函數爲,因此你應該使用atof,像這樣:

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

int main(int argc, char* argv[]) 
{ 
    int i; 
    double sum = 0; 
    for(i = 1; i < (argc); ++i) 
    sum += atof(argv[i]); 
    printf("%f\n", sum); 

    return 0; 

} 

治療數爲實數,而不是整數。

輸出:

[email protected]:~$ ./a.out 4.5 6 5.5 
16.000000 

因爲現在6被處理像6.0


你可能想讀這還有:How to convert string to float?

+0

簡直不錯^^。我忘了添加錯誤的輸入問題。例如:./main 4 4 n 5 它應該給出一個提示,即有什麼不妥之處。而不是把n排除在等式之外。 – letter

+0

@letter你應該接受答案,因爲它回答你的問題。 :)對於你忘了,只需使用'isdigit()'(或閱讀:http://stackoverflow.com/questions/16644906/how-to-check-if-a-string-is-a-number)。如果您仍有問題,請發佈一個新問題並與我分享鏈接。 :) – gsamaras

0

您應該使用double存儲浮點數,atof解析字符串和%fprintf符。

+0

AFAIK,'%lf'是雙數據類型的格式說明符... – user3078414

+0

@ user3078414 [printf函數系列沒有區別](http://stackoverflow.com/questions/25860850/what-is-的差-F-和-LF-在-C間)。 – Roman

2

我測試了下面的代碼。它將打印最多2個小數位的浮點數。

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

int main(int argc, char* argv[]) 
{ 
    int i; 
    double sum = 0; 
    for(i=1; i<argc; i++) 
     sum += atof(argv[i]); 
    printf("%.2f\n", sum); 

    return 0; 
} 
0

雖然我得到的strtod一個隱含的聲明警告(因爲Linux手冊不告訴我準確的包括使用),這個代碼做如下工作:

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

int main(int argc, char* argv[]) 
{ 
    int i; 
    double sum=0; 
    for(i=1; i < argc; ++i) 
sum += strtod(argv[i],NULL); 
    printf("%f\n", sum); 

    return 0; 

} 

該手冊還規定以下爲使用atoi()的問題:

The atoi() function converts the initial portion of the string pointed to by nptr to int. 
The behavior is the same as 

strtol(nptr, (char **) NULL, 10); 

except that atoi() does not detect errors.