如何更改c中的数据类型

时间:2016-04-30 17:45:59

标签: c types floating-point

我有一个函数,它添加给定的参数并打印结果。

使用整数,根本没有问题。使用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 个答案:

答案 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;

}

将数字视为实数,而不是整数。

输出:

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.