问题描述
在我的C程序中,我想获取输入的数字总和的平均值,直到程序停止为止。我应该添加什么来检查平均值?谢谢!
#include <stdio.h>
int main (void)
{
int x;
int sum = 0;
int average;
int testEOF;
//Statements
printf("Enter your numbers: <EOF> to stop.\n");
do
{
testEOF = scanf("%d",&x);
if (testEOF !=EOF)
sum +=x;
} while (testEOF !=EOF);
printf ("\nTotal: %d\n",sum);
printf ("\nAverage: %d\n",average);
return 0;
//main
}
解决方法
- 正如其他人所解释的那样,您必须初始化
sum
和count
,但它们从未被赋予初始值。无需初始化average
和x
,因为您将sum/count
分配给average
,用户将把任何值分配给x
。 - 您必须将
if
语句要执行的所有操作放在{...}
中。但是你没有。您的if语句仅适用sum +=x
,不适用于count++
和average = sum / count
。因此,即使在count
之后,您的程序也会增加EOF
的值。因此,您找到了14/6
而不是14/5
。 - 您检查了
testEOF != EOF
两次。一个在if
语句中,另一个在do-while
中。
我将代码放在下面:
#include <stdio.h>
int main (void){
float x;
float sum = 0;
float count = 0;
float average;
float testEOF;
printf("Enter your numbers: <EOF> to stop.\n");
while(1){
testEOF = scanf("%f",&x);
if (testEOF ==EOF){
break;
}
sum +=x;
count++;
average = sum / count;
}
printf ("\nTotal: %f\n",sum);
printf ("\nAverage: %.2f\n",average);
return 0;
}
,
如果您希望输出带有小数点的输出,可以在这种情况下执行以下操作
对于像0,1,1
这样的输入,输出将是0.666667
,否则将是0
而忽略小数部分。
{@ {1}}部分可以按照@David C. Rankin的建议进行优化
while
,
public static PersonDatabase getInstance(Context context) {
if (instance == null) {
synchronized (LOCK) {
Log.d(LOG_TAG,"Creating new database instance");
final SupportFactory factory = new SupportFactory(passphrase);
instance = Room.databaseBuilder(context.getApplicationContext(),PersonDatabase.class,PersonDatabase.DB_NAME)
.openHelperFactory(factory)
.build();
}
}
Log.d(LOG_TAG,"Getting the database instance");
return instance;
}
public abstract PersonDao personDao();
现在这几乎是正确的。唯一的事情是数字不会除以输入值的数量。 例: 2 3 3 3 3
总和是14 平均:2.3(应为2.8)
似乎每次获得平均值时,计数都会加1。