好的,基本上,我需要找到学生小组的平均成绩,而不知道他们的确切数字。
以下代码如下:
#include <stdio.h>
int main (void)
{
unsigned int counter;
int grade;
int total;
float average;
total = 0;
counter = 0;
printf( "%s", "Enter grade, -1 to end: " );
scanf( "%d", &grade);
while (grade != -1)
{
total = total + grade;
counter = counter + 1;
printf( "%s", "Enter grade, -1 to end: " );
scanf( "%d", &grade );
}
if ( counter != 0 )
{
average = (float) total / counter;
printf( "Class average is %.2f\n", average);
}
else
{
puts( "No grades were entered" );
}
return 0;
}
基本上,这个应该给我任意数量的等级的平均等级。但每当我输入随机数量的等级,然后打印&#34; -1&#34;为了停止循环,它打印消息&#34;等级平均值为0&#34;。不管你输入了多少数字。唯一正常工作的条件是你不打印任何等级并打印&#34; -1&#34;马上,然后&#34;没有输入成绩&#34;在这里工作。
请帮助我。因为无论是盲目的我还是一些严重的错误我无法看到。第三种变体包括书中的错误。
期待您的帮助!
答案 0 :(得分:0)
完美适合我:
Enter grade, -1 to end: 5
Enter grade, -1 to end: 5
Enter grade, -1 to end: 4
Enter grade, -1 to end: 3
Enter grade, -1 to end: -1
Class average is 4.25
$ gcc --version
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
答案 1 :(得分:0)
如果您知道如何使用调试器,则可以尝试使用。有时调试器和交互式程序相处得很差,因此您可以从文件中读取输入而不是标准输入,以使调试器满意。
如果你还不熟悉调试器,一个好的起点是添加一些调试代码来回显你正在使用的数字。例如,退出循环后,添加:
printf("counter = %d, total = %d\n", counter, total);
一个可能的问题在于除法,特别是如果你使用的是可疑的编译器,因为你对另一个回复提示的评论)。强制转换的优先级假设高于除法,但您可以尝试将这两个数字转换为浮点数:
average = (float) total / (float) counter;
您还可以在结果打印上尝试一般%f
。
答案 2 :(得分:-1)
#include <stdio.h>
int main (void) {
unsigned int counter;
int grade;
int total;
float average;
total = 0;
counter = 0;
grade = -2;
fflush(stdin);
while (grade != -1) {
printf( "%s", "Enter grade, -1 to end: " );
scanf( "%d", &grade);
total = total + grade;
counter = counter + 1;
};
if ( counter != 0 ) {
average = (float) total / counter;
printf( "Class average is %.2f\n", average);
}
else {
puts( "No grades were entered" );
}
return 0;
}
答案 3 :(得分:-1)
在UNIX / Linux环境中,将初始化STDIN键盘映射文件IO。因此,在GCC / G ++中,它可能会起作用。
在Visual C / C ++中,它可能不起作用。
问题:
要使其在每个标准C环境中运行,您将能够首先清除标准输入文件系统。