[英]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
做到这一点,您需要使用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]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.