в чем проблема с моим кодом, он не возвращает значение, если b! = - 1 - PullRequest
0 голосов
/ 19 сентября 2018

в чем проблема с моим кодом, он не возвращает значение, если b! = - 1

 #include <stdio.h>

int find_even(int k){
    int a,b,i=0;
    scanf("%d",&a);
    while (a>=0){
        if(i<k){
            if (a>=0 && a%2 == 0){
                b=a;
                i++;
            }

        }
        scanf("%d",&a);
    }
    if (i<k){
        b=-1;
    }
    return b;

}

void main(){
    int k;
    printf("Enter the value of K : ");
    scanf("%d",&k);
    printf("Enter the sequence of non negative integers and at end enter a negative integer  : ");
    if (find_even(k)<0)
        printf("No %dth even integer exist.",k);
    else
        printf("Result = %d. ",find_even(k));
}

Я пытаюсь получить четную k-ую цифру, но не получаю никакого значения, возвращаемого всякий раз, когдазначение b не равно -1

1 Ответ

0 голосов
/ 19 сентября 2018

Причина, по которой вы, похоже, не получаете вывод, если не введете -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 и всех его тонкостях для его правильного использования.

...