繁体   English   中英

如何从stdin中读取一行数字并计算其平均值?

[英]How can i read a line of numbers from stdin & compute their average?

如何计算和提取stdin中的许多元素?

例如,len()在Python中很容易获得,但在C语言中不可用?

我试图计算平均值,例如当用户输入以下内容时:1 3 5 7 8 10 11 -1

我尝试了以下方法:

while (user_input != -1)
{
    total   += user_input;
    scanf ("%d", &user_input);

    //cannot work               
    average = total /  ...
}       
printf("Average = %f\n", average);  

您必须维护一个计数器来执行您要尝试执行的操作。 它的正int counter = 0; 并在循环中: counter++

int counter = 0;
while (user_input != -1)
{
    total   += user_input;
    counter ++;
    scanf ("%d", &user_input);
}       
average = total / counter;
printf("Average = %f\n", average);  

显然,您必须检查scanf()是否至少返回1

---编辑---以下程序(与上一个程序相对应)有效,并且可以按要求工作。 不了解scanf()工作原理的人应该避免该死:

#include <stdio.h>

int main(int argc, char *argv[])
{
   int total = 0;
   float average = 0.0f;
   int userinput = 0;
   int counter = -1;
   while(userinput != -1){
      counter ++;
      if(scanf("%d",&userinput) == 1 && userinput != -1){
         total += userinput;
      }
   }
   average = ((float)total/(float)counter);
   printf("Average = %f", average);
   return 0;
}

输入: 10 20 30 40 50 60 -1输出: Average = 35

从修改后的问题和评论中,您似乎真正想要做的就是从用户那里读取一行输入,然后从该行提取数字。
答案是,您无法使用scanf做到这一点,您需要使用fgetsstdin读取行,然后需要从该读取行中提取数字。 这里有一个,
快速示例程序

#include<stdio.h>
int main()
{
    char line[1024], *beg, *end;
    long readvalue;
    while (fgets(line, sizeof(line), stdin)) 
    {
        beg = line;
        for (beg = line; ; beg = end) 
        {
            readvalue = strtol(beg, &end, 10);
            if (beg == end)
                break;
                printf("[%d]",readvalue);
        }
    }
    return 0;
}

输入:

1 3 5 7 8 10 11 -1

输出:

[1][3][5][7][8][10][11][-1]

暂无
暂无

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

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