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