от
Я делаю некоторые упражнения на codewars, и пришлось сделать функцию digital_root (рекурсивно добавить все цифры вместе, пока есть только одна цифра слева). Я был довольно уверен, что я сделал все правильно, но почему-то мой цикл while ни разу не ломался, хотя моих отпечатков показал, что лен был 1.
#include 
#include 

int digital_root(int n) {
  char number[10];
  sprintf(number, "%d", n);

  int len = strlen(number);
  printf("Outer print: %s %d %d\n", number, n, len);
  int sum = 0;
  while(len > 1)
  {
    sum = 0;
    for(int i = 0; i<len; i  )
    {
      sum  = number[i] 

Мне потребовалось много времени, чтобы выяснить, что случилось. Я заметил, что я копировать вставить 'инт' ключевое слово, когда я пересчитал лен в цикл while (строки, помеченные !!!). Когда я снял, что (потому что это не было необходимо, чтобы переопределить его как int, то он уже был), все вдруг сработало, как предполагалось. 

Это немного смутило меня. Зачем этот вопрос? Я понимаю, что переосмысление это плохая практика, но я не понимаю, как это приведет в цикл while не ломать?

Используемый компилятор Clan3.6/С11.

(ПС. Когда я попробовал тот же код в Тио, он работал в обоих случаях...)

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.
...