#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 цифр, например.