我如何从标准输入读取一行数字并计算它们的平均值?

我如何计算并从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

—编辑—以下程序(对应于前一个程序)是VALID并按要求工作。 那些不了解scanf()如何工作的人应该留下来该死的:

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