Member 12963806 Ответов: 2

Почему я получаю 0 вместо 2


разбейте данное целое число на цифры и выведите число "5", присутствующее в целочисленном числе, используя рекурсию

Что я уже пробовал:

#include <stdio.h>
 
int extract (int); 
 
int main()
{
  int Number, r = 0;
 
  printf("\nPlease Enter any number\n");
  scanf("%d", &Number);
 
  r = extract(Number);
 
  printf(" %d", r);
  return 0;
}
 
int extract (int Number)
{
   int Reminder, c=0;
 
  if(Number > 0)
  {
    Reminder = Number % 10;
     if(Number == 5)
     {
         c=c+1;
     }
     else
     {
         c=0;
     }
    extract (Number / 10);
    return c;
  }
 else
   return 0;
}


[edit]добавлен блок кода-OriginalGriff [/edit]

Richard MacCutchan

Ваша рекурсия не работает, потому что вы игнорируете значение, возвращаемое из нее внутри вашей функции извлечения.

2 Ответов

Рейтинг:
2

OriginalGriff

Ну ... потому что вы устанавливаете счетчик на ноль каждый раз, когда встречаете цифру, которая не '5'.
Итак, если самая значимая цифра 1, 2, 3, 4, 6, 7, 8, или 9 вы всегда будете возвращать 0-независимо от количества цифр " 5 " в пользовательском вводе.

Посмотрите сами-используйте отладчик, и он покажет вам, что происходит.
Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что именно то, что вы ожидали, произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Пора вам освоить новый (и очень, очень полезный) навык: отладку!


Member 12963806

какие-нибудь инструменты отладчика есть в интернете?

OriginalGriff

Почему бы не использовать его для системы, в которой вы компилируетесь?

Рейтинг:
2

Patrice T

Я вижу 3 различные причины, по которым ваш код не работает.
один из них:

extract (Number / 10);

В рекурсивном вызове вы просто отбрасываете результат, это ошибка.
Сделайте себе одолжение и научитесь пользоваться отладчиком.

Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Он позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.