Я хочу подсчитать числа в int от пользовательского ввода от char до нуля. Этот код делает только 1 цикл. (Пожалуйста, помогите мне понять, что не так во второй части.)
void count_down_from(int num);
int main()
{
int start;
char letter;
printf("print letter to reduce to zero in ACSCII");
scanf("%c", &letter);
count_down_from(letter);
return 0;
}
Эта часть работает не очень хорошо:
void count_down_from(int num)
{
if (num > 0)
{
--num;
count_down_from;
printf("%d\n", num);
}
else
return;
}
}
Какое поведение ожидается:
void count_down_from(int num)
{
printf("%d\n", num);
--num;
if (num < 0)
return;
else
count_down_from(num);
}
Точно. Второй блок не работает. 3D код работает как второй должен.
Оператор count_down_from;
абсолютно ничего не делает, и если ваш компилятор не предупредит вас об этом, вы недостаточно повысили уровень предупреждений. У вас есть функция, которая работает (последний блок кода), и функция, которая не работает (второй блок кода). Различия между ними точно причины этого. Так что я даже не вижу, в чем здесь вопрос.
Что вы имеете в виду под "абсолютно ничего не делает"? Мой компилятор gcc последней версии. Что не так с кодом?
count_down_from
— это функция. Таким образом, просто count_down_from;
не является допустимым синтаксисом вызова функции и по сути ничего не делает. Для вызова функции нужно сделать count_down_from(num);
. Вы должны увидеть это, даже просто сравнив со вторым кодом.
Пропущено (число) в вызове функции во втором блоке.
взгляните на мои модификации
void count_down_from(int num)
{
if (num >= 0) //need the >= operator to go down to zero not just 1
{
printf("%d\n", num);
--num;
count_down_from(num); //you need to send num to the call otherwise it won't be a recursive function
}
else
return;
}
else return;
немного бессмысленно; код вернется в любом случае.
Неясно, что такое фактическое поведение по сравнению с фактическим поведением. Не могли бы вы дать точный ввод, ожидаемый результат и фактический результат? А почему вы показываете две версии кода? Вы говорите, что один работает, а другой нет?