2016-04-30 91 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.