繁体   English   中英

如何找到在命令行输入的双精度数字的平均值?

[英]How do I find the average of double numbers entered at the command line?

我必须找到用户在命令行中输入的双精度数的平均值,因此我的程序应该可以处理任意数量的输入。 我知道我必须找到所有数字的总和,然后除以输入数。

我在想,要找到输入的数量,我将使用sscanf在参数列表中读取“ char * num”。 因为sscanf返回读取的字符。 然后我正在考虑使用该数将总和除以得出平均值。 但是我的代码遇到了麻烦。 :(

#include <stdio.h>

void average(int arg_list, char *num[])
{
   int x;
   double sum, average;

   x = sscanf(num, "%s\n", &x);

   for (int i = 0; i != '\0'; i++)
   {
      sum = sum + num[i];
   }

   average = sum/x;
   printf("%lf\n", average);;
}

int main(int argc, char *argv[])
{
   if (argc == 0)
   {
      perror("Error!\n");
   }

   average(argc, argv);
}

具体来说,当我尝试编译程序时,编译器会抱怨“ sscanf”及其总和。 :/

"%s"读取一个字符串。 您要从字符串中读取双精度字,因此应使用"%lf" 环路:

double sum = 0; //you forgot to initialize
//start from i=1, not 0; the first argument is the program's name
for (int i = 1; i < arg_list; i++) {
    double x;
//from the i'th argument, read a double, into x :
    sscanf(num[i], "%lf", &x);
    sum += x;
}
average = sum/(arg_list-1);

您还应该修正支票:

if (argc <= 1) {
   perror("Error!\n");
}
#include <stdio.h>
#include <stdlib.h>

void average(int arg_list, char *num[])
{
   double sum = 0, average;//sum : 0 initialize
   int i;
   for (i = 1; i < arg_list; i++){
      sum = sum + atof(num[i]);
   }
   average = sum/(--i);
   printf("%lf\n", average);;
}

int main(int argc, char *argv[])
{
   if (argc < 2)//include program name argv[0], argc == 1 even when only ./a.out
   {
      perror("Error!\n");
      return -1;
   }

   average(argc, argv);

    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM