我如何从stdin&读取一行数字?计算他们的平均值

时间:2013-01-20 11:51:00

标签: c

我怎么算和从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);  

2 个答案:

答案 0 :(得分:1)

你必须维持一个柜台去做你想做的事。它只是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

---编辑--- 以下程序(对应于上一个程序)是VALID并按要求工作。那些不了解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

答案 1 :(得分:0)

来自修改过的问题&amp;评论,你真正想要做的就是从用户那里读取一行输入,然后从该输入行中提取数字。
答案是您无法使用scanf执行此操作,您需要使用fgets来读取stdin中的行,然后您需要从该读取行中提取数字。这是一个,
  Quick sample program

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