为什么这里的“ sum”变量没有每次迭代更新?

时间:2020-10-01 07:37:13

标签: c variables syntax scanf

我用C语言编写了这个相当简单的代码,以求出5个数字的平均值:-

int main()
{
    int n,sum = 0;
    for(int i = 0; i < 5; i++)
        sum += scanf("%d", &n);
    printf("avg =%d/n",(sum / 5));
    return 0;
}

但是,它没有给我正确的输出。

因此,在检查了一些语句之后,我最终使用以下代码获得了正确的输出:-

int main()
{
    int n,sum = 0;
    for(int i = 0; i < 5; i++)
    {
        scanf("%d", &n);
        sum+=n;
    }
    printf("avg =%d\n", (sum / 5));
    return 0;
}

唯一的区别是我没有像在第一种情况下那样通过将扫描的值添加到sum变量中来直接更新和,然后在第一个代码的循环中添加了一条print语句以查看发生了什么继续,发现不是存储输入的总和,而是存储该实例的输入值(例如,如果我在第一次迭代中输入1,那么它将存储1,然后在我输入2而不是存储3时)正在存储2),依此类推。

任何人都可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:2)

scanf("%d", &n) 将扫描值存储在格式字符串后的指针所指向的内存中,即&n所指向的内存中是变量n

scanf 返回成功扫描的项目数。在您的情况下,当用户输入有效的整数时,该值为1。

因此,必须将n添加到sum中。返回值不是。这就是第二种解决方案正确的原因。

顺便说一句

您应始终检查scanf返回的值,以确保已扫描正确数量的项目。喜欢:

int main()
{
    int n,sum = 0;
    for(int i = 0; i < 5; i++)
    {
        if (scanf("%d", &n) != 1)
        {
            // Error - coud not read valid integer

            // Add some error handling or simply stop the program using
            exit(1);
        }
        sum+=n;
    }
    printf("avg =%d\n", (sum / 5));
    return 0;
}