c++ - 为什么这个 for 循环代码在不被接受的条件下工作?
问题描述
我不明白为什么这段代码有效。变量a
由用户给定数字,并且根据调试测试i=a
不被接受为条件,而i
只是取一个数字a
,然后给定数字,比如 3333,除以 10 直到它变为 0。当 a = 0 ,程序刚刚结束。
如果 i = a 未被接受为条件,为什么程序在 (a) 达到 0 时停止?我在 CLion、Dev C++ 和 Online Compiler 上检查了这段代码。
double DigitCountSum(int a)
{
int s = 0, n;
for (int i = 1; i = a; i++) {
n = a % 10;
s += n;
a = a / 10;
}
return s;
}
int main()
{
int a;
cin >> a;
cout << DigitCountSum(a) << endl;
}
解决方案
看看这一行:
for (int i = 1; i = a; i++)
i = a
是分配,不是比较。您应该==
用于比较。但是,即使您将其更改为==
,逻辑仍然不正确(因为循环将在特殊情况下迭代一次,a = 1
否则为 0 次)。
你的意思是写i <= a
吗?
顺便说一句,我认为while
循环在这里可能是一个更好的选择 - 与我相比i
并a
没有多大意义。此外,您目前没有使用s
or做任何事情n
,因此目前不需要这些代码部分。
此外,double
作为返回类型确实没有意义,因为答案只能是整数。毕竟,例如,一个数字不能有 2.3 位数字。
推荐阅读
- firebase - React Native Firebase AB 测试未显示正确数据
- html2canvas - html2canvas 没有为 img 获得正确的尺寸
- python - 如何在使用 python 从 mysql 数据库中获取数据时提取整数值
- c# - 美国街道名称和其他街道名称和门牌号码的分离
- post - Wix:创建帖子按钮,从实时站点创建帖子
- filter - 是否可以在 NestJs 上的异常过滤器上使用 useInterceptor?
- python - 与循环一起使用时,Ansible 覆盖安全组规则
- nexus - 将 jar 部署到服务器的 RPM 规范文件
- javascript - 如何通过点击事件使用新值更新变量并使用相同事件撤消它
- javascript - 将“异步”方法绑定到“开启”事件(例如单击)时是否存在任何潜在问题?