如何解决为什么这里的“ sum”变量没有每次迭代更新?
我用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),依此类推。
任何人都可以解释为什么会这样吗?
解决方法
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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。