我需要打印用户输入数组的总和和平均值。因此,如果用户输入2,4,6,9,10,则应打印6。 但是,循环结束后,我的printf不再打印任何内容。
即使我将printf放在数组中,它也只会打印出0。
#include <stdio.h>
#include <math.h>
int main()
{
int i;
double num[6],average, sum=0, closest;
printf("Enter 6 doubles\n");
for (i=0; i<6; i++)
{
scanf("%lf",&num[i]);
sum += num[i];
}
average = sum/i;
printf("Average %d", average);
}
答案 0 :(得分:0)
您需要在代码中做一些事情。您应该确保他们输入6个数字(在您的开篇文章中仅列出5),这会造成问题。我将打印更改为使用此格式,并去除了一些您不使用的变量。
#include <stdio.h>
#include <math.h>
int main()
{
int i;
double sum = 0;
printf("Enter 6 doubles\n");
for (i = 0; i < 6; i++)
{
double value;
scanf("%lf", &value);
sum += value;
}
printf("Average = %f", sum / i);
}
输入6个双打:
2 4 6 9 10 10
平均值= 6.833333
答案 1 :(得分:0)
这个问题不是重复的,但是我在StackOverflow here
上找到了答案stdout流已缓冲,因此将仅显示 到达换行符后(或被告知时)缓冲。你有一个 几个选项可以立即打印:
使用fprintf打印到stderr:
fprintf(stderr, "I will be printed immediately");
在需要使用fflush时刷新标准输出:
printf("Buffered, will be flushed"); fflush(stdout); // Will now print everything in the stdout buffer
您还可以禁用缓冲 通过使用setbuf在stdout上:
setbuf(stdout, NULL);
然后关于您的代码,这里有几点说明:
man 3 printf
中所述,转换说明符f
已转换为双浮点值,因此不需要长度修饰符标志。%d
,则会丢失实际价值部分,请考虑同时使用%f
。答案 2 :(得分:0)
以下建议的代码:
main()
使用正确的签名printf()
的调用中使用的格式现在,建议的代码:
#include <stdio.h> // printf(), scanf(), perror()
//#include <math.h>
#include <stdlib.h> // exit(), EXIT_FAILURE
#define MAX_ENTRIES 6
int main( void )
{
//int i;
// double num[6];
double num;
double average;
double sum=0.0;
// double closest;
printf("Enter %d doubles\n", MAX_ENTRIES );
for (int i=0; i< MAX_ENTRIES; i++)
{
if( scanf( "%lf", &num ) != 1 )
{
fprintf( stderr, "scanf for number failed\n" );
exit( EXIT_FAILURE );
}
sum += num;
}
average = sum / MAX_ENTRIES;
printf("Average %f\n", average);
}
典型的代码运行结果为:
Enter 6 doubles
1.0
2.0
3.0
4.0
5.0
6.0
Average 3.500000