Причина, по которой вы, похоже, не получаете вывод, если не введете -1, заключается в том, что вы должны ввести хотя бы k
четные числа, чтобы (i<k)
было истинным.Каждый раз, когда вы вводите положительное четное число в цикле, я увеличиваю:
if (a>=0 && a%2 == 0){
b=a;
i++; // here
Так что, если вы введете положительное четное число (скажем, 2) больше, чем k раз, вы получите результат, который не-1.
После возврата из функции, если результат отрицательный, вы делаете:
printf("No %dth even integer exist.",k);
Если результат положительный, вы возвращаетесь в функцию во второй раз:
printf("Result = %d. ",find_even(k)); // This is going to re-enter find_even
Я думаю, что вам нужно сохранить результат вызова функции и действовать в соответствии с этим.Вот так:
int result = find_even(k);
if (result<0)
printf("No %dth even integer exist.",k);
else
printf("Result = %d. ", result);
Редактировать: Я думаю, я понимаю, что вы пытаетесь сделать сейчас.Это немного сбивало с толку, учитывая запрос и то, как все выглядит на экране.Добавьте \n
в конец printf
, чтобы сделать это менее запутанным на терминале:
printf("Enter the sequence of non negative integers and at end enter a negative integer :\n");
Теперь все входные данные будут выровнены и имеют больше смысла.
Также будьте осторожны с scanf()
, так как это не самая надежная функция.Это хорошо для возиться, но это небезопасно для использования общего назначения.Ознакомьтесь с этим небольшим руководством для получения дополнительной информации о scanf
и всех его тонкостях для его правильного использования.