我有一个函数,它添加给定的参数并打印结果。
使用整数,根本没有问题。使用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;
}
答案 0 :(得分:4)
在c中,c++中没有函数重载,因此您应该使用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;
}
将数字视为实数,而不是整数。
输出:
gsamaras@gsamaras-A15:~$ ./a.out 4.5 6 5.5
16.000000
因为现在6
被视为6.0
。
您可能也希望阅读此内容:How to convert string to float?
答案 1 :(得分: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;
}
答案 2 :(得分:0)
您应该使用double
存储浮点数,atof
来解析字符串和%f
printf
说明符。
答案 3 :(得分: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.