有人可以帮助我,因为没有循环问题。
#include <stdio.h>
int main ()
{
int counter = 0;
int average= 0;
int grade = 0;
printf("Introduce grade:");
grade=scanf("%d",&grade);
counter++;
while(grade > 0)
{
if (grade <0 && grade >100)
printf("Invalid number");
else
average +=grade;
counter++;
}
printf("average = %lf", average/counter);
}
答案 0 :(得分:1)
可能的解决方法:
#include <stdio.h>
int main (void) /* it is better to add void */
{
int counter = 0;
int sum = 0; /* no average is here */
int grade = 0;
int check;
for(;;) /* make it to an infinite loop, break later */
{
/* put this block inside the loop */
printf("Introduce grade:");
check = scanf("%d",&grade); /* don't assign scanf's return variable to grade, which deletes the grade read */
if (check != 1) /* check if a integer was read */
{
puts("Invalid input. Panik!");
return 1;
}
if (grade <= 0) /* !(grade > 0) */
{
break;
}
if (grade <0 || grade >100) /* && -> || */
{
printf("Invalid number");
}
else
{
sum += grade;
counter++; /* made to be done only if grade>=0 && grade<=100 */
}
}
printf("average = %lf", (double)sum/counter); /* add cast to double */
return 0; /* it may be better to add return 0; */
}
答案 1 :(得分:1)
grade=scanf("%d",&grade);
以上一行存在一些问题。你基本上做的是读取输入并将其存储在grade
中,然后用读取的项目数覆盖grade
。所以,你应该改为以下。
scanf("%d", &grade)
现在,以下还有一些问题。
if (grade <0 && grade >100)
这种情况永远不会成立。相反,您需要使用以下内容。
if( grade < 0 || grade > 100 )
最后,你的循环永远不会结束。在循环中,您会检查while
grade > 0
。由于您永远不会修改grade
,因此循环永远不会结束。您可以在修改grade
。