c-如何不在while循环中获得额外计数



我有以下代码,每次运行它时,我都会得到一个额外的计数。例如,假设我在第一轮输入8,然后在下一轮输入2,然后用sentinel-1退出,总数将如预期的那样为10,但计数将为3。我已经调试了这个程序,无论count是在scanf((之前还是之后,我仍然得到一个3的值。一种可能的解决方案是将计数初始化为-1。然而,我觉得我不应该这样做,将count设置为零应该有效。我必须将count设置为-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;
}

对于初学者来说,将变量sum声明为具有类型int没有什么意义,因为在任何情况下,您都将其强制转换为类型double

average = (double)(sum)/(double)(count);

在用户输入内容之前,您正在增加变量count

该函数可以通过以下方式定义,如下面的演示程序所示。

#include <stdio.h>
void calculateAverage( void )
{
const int Sentinel = -1;

size_t count = 0;
double sum = 0.0;

printf( "input a grade (%d - stop): ", Sentinel );
for ( int grade; scanf( "%d", &grade ) == 1 && grade != Sentinel; )
{
sum += grade;
++count;
printf( "input a grade (%d - stop): ", Sentinel );
}        
double average = count == 0 ? sum  : sum / count;

printf( "%.2lf", average );
}
int main(void) 
{
calculateAverage();

return 0;
}

程序输出可能看起来像

input a grade (-1 - stop): 1
input a grade (-1 - stop): 2
input a grade (-1 - stop): 3
input a grade (-1 - stop): 4
input a grade (-1 - stop): 5
input a grade (-1 - stop): 6
input a grade (-1 - stop): 7
input a grade (-1 - stop): 8
input a grade (-1 - stop): 9
input a grade (-1 - stop): 10
input a grade (-1 - stop): -1
5.50

在输入-1之前,您正在递增计数。所以,它也算-1。如果不是-1,则只是增加。

#include <stdio.h>
void calculateAverage()
{
int grade = 0, count = 0, sum = 0;
double average;
while (grade != -1)
{
sum += grade;
printf("input a grade (-1 - stop): ");
scanf("%d", &grade);
if (grade != -1) // Check this line
count++;
}
average = (double)sum / count;
printf("%.2lfn", average, sum, count);
return;
}
int main()
{
while (1)
calculateAverage();
return 0;
}

最新更新