【发布时间】:2021-06-23 10:53:12
【问题描述】:
我有以下代码,每次运行它,我都会得到一个额外的计数。例如,我第一轮输入 8,然后下一轮输入 2,并以标记 -1 退出,总和将按预期为 10,但计数将为 3。我已经调试了程序,无论计数是否到来在 scanf() 之前或之后,我仍然得到一个 3 值。一种可能的解决方案是将计数初始化为 -1。但是,我觉得我不应该这样做,并且将计数设置为零应该可以。我必须将计数设置为 -1 吗?
#include <stdio.h>
void calculateAverage()
{
int grade = 0, count, sum = 0;
double average;
count = 0;
while(grade != -1)
{
sum += grade;
count++;
printf("input a grade: \n");
scanf("%d", &grade);
}
average = (double)(sum)/(double)(count);
printf("%.2lf", average);
return;
}
int main( )
{
while (1)
calculateAverage();
return 0;
}
【问题讨论】:
-
循环的第一次迭代始终以包含在计数中的 0 级开始。看看
do-while循环,看看你是否能弄清楚它对你的算法有什么帮助。 -
可能以
count = -1开头,而不是count = 0 -
仔细阅读您的代码;)您在开始使用 scanf 输入值之前进入循环。这意味着您每次都会有一个额外的迭代。如果您是编程初学者,我建议您对算法中的变量进行跟踪,即拿起笔和纸,按照您的代码,并更新每个变量。这样,您将更多地了解哪些部分未按预期运行。就像@ChristianGibbons 所说,使用 do-while 循环
-
“我必须将计数设置为 -1 吗?” - 这有什么问题吗?
标签: c xcode loops counting function-definition