有人能告诉我我的代码有什么问题并试着解释一下吗?

时间:2015-09-21 01:25:39

标签: c

有人可以帮助我,因为没有循环问题。

#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);
 }          

2 个答案:

答案 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

的循环中添加一些代码