2

如何从标准输入中计算和提取一些元素?

例如, 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);  
4

2 回答 2

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

--- 编辑 --- 以下程序(对应于前一个程序)是有效的并按要求工作。不了解如何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

于 2013-01-20T12:01:25.797 回答
0

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

#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]
于 2013-01-20T11:54:45.957 回答