首页 > 解决方案 > 为什么这个 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;
}

标签: c++

解决方案


看看这一行:

for (int i = 1; i = a; i++)

i = a是分配,不是比较。您应该==用于比较。但是,即使您将其更改为==,逻辑仍然不正确(因为循环将在特殊情况下迭代一次,a = 1否则为 0 次)。

你的意思是写i <= a吗?

顺便说一句,我认为while循环在这里可能是一个更好的选择 - 与我相比ia没有多大意义。此外,您目前没有使用sor做任何事情n,因此目前不需要这些代码部分。

此外,double作为返回类型确实没有意义,因为答案只能是整数。毕竟,例如,一个数字不能有 2.3 位数字。


推荐阅读