Почему этот код цикла for работает с условием, которое не принимается?

#c

Вопрос:

Я не могу понять, почему этот код работает. Переменной a присваивается пользователем номер, и соответствующий тест с отладкой i=a не принимается в качестве условия, а i просто принимает число a , после чего заданное число, скажем, 3333, делится на 10, пока не станет 0. Когда a = 0, программа просто завершается.

Если i = a не было принято в качестве условия, почему программа останавливается, когда (a) достигает 0? Я проверил этот код на CLion,Dev C и онлайн-компиляторе.

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

Комментарии:

1. У вас есть i=a условие as, и как a 0, i будет присвоено 0, и выражение также приведет к 0, что будет считаться ложным и, таким образом, разорвет цикл. Вы, наверное, хотели написать i==a вместо этого.

2. Вы также должны объяснить, что именно вас удивляет.

3. @SWdV теперь это можно опубликовать в качестве ответа, к вашему сведению.

Ответ №1:

Взгляните на эту строку:

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

i = a это назначение, а не сравнение. Вы должны использовать == для сравнения. Однако, даже если вы измените это на == , логика все равно будет неправильной (потому что тогда цикл будет повторяться один раз в этом частном случае a = 1 и 0 раз в противном случае).

Ты хотел написать i <= a ?

Кстати, я думаю, что while цикл мог бы быть лучшим выбором здесь — по сравнению i с a не имеет большого смысла для меня. Кроме того, в настоящее время вы ничего не делаете с s или n , поэтому эти части кода в настоящее время не нужны.

Кроме того, double действительно не имеет смысла в качестве возвращаемого типа, потому что ответ может быть только целым числом. В конце концов, число не может состоять из 2,3 цифр, например.