【问题标题】:How to change datatypes in c如何在c中更改数据类型
【发布时间】:2016-08-25 18:51:25
【问题描述】:

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

对于整数,完全没有问题。使用 atoi 更改字符串参数 -> int.
例如: ./main 3 4 5 将打印 12。

但是如果我有 ./main 4.5 6 5.5 ?我该如何在 C 中做这样的事情?函数如何“看到”它现在必须将参数类型更改为浮动?

#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;

}

【问题讨论】:

    标签: c types floating-point


    【解决方案1】:

    虽然我收到了 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.
    

    【讨论】:

      【解决方案2】:

      中,没有像那样的函数重载,因此你应该使用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?

      【讨论】:

      • 简直太好了^^。我忘了添加错误输入问题。例如: ./main 4 4 n 5 它应该给出一个提示,有什么不对劲的地方。而不是仅仅将 n 排除在等式之外。
      • @letter 你应该接受这个答案,因为它回答了你的问题。 :) 对于您忘记的内容,只需使用 isdigit()(或阅读此内容:stackoverflow.com/questions/16644906/…)。如果您仍然有问题,请发布一个新问题并与我分享链接。 :)
      【解决方案3】:

      我已经测试了下面的代码。它会将浮点数打印到小数点后 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;
      }
      

      【讨论】:

        【解决方案4】:

        您应该使用double 来存储浮点数,atof 来解析字符串和%f printf 说明符。

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-13
        • 1970-01-01
        • 2014-04-08
        • 2011-02-04
        • 2016-09-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多