Если я использую другое, «ДАЖЕ НОМЕР ВВЕДЕН» печатается один раз, а если нет, ДВАЖДЫ.Зачем? - PullRequest
0 голосов
/ 12 июня 2018
#include<stdio.h>

int main()
{
    int num;
    printf("Enter a EVEN Number: ");
    scanf("%d",&num);

    if (num%2!=0)
    {
        printf("WRONG INPUT\n\n");
        main();
    }

    printf("EVEN NUMBER ENTERED\n");
}

Here Is The Output For Above Code When I DONT USE ELSE

Это как-то связано с тем, как AC Program хранит информацию, используя стек?Или я пропускаю какую-то концепцию

1 Ответ

0 голосов
/ 12 июня 2018

Когда вы указали 3 в качестве входных данных, условие if будет истинным, и main() будет вызвано во второй раз.

Затем вы дали четное число в качестве входных данных, и в этом случае потокэлемент управления не войдет в тело if, а просто напечатает сообщение «EVEN NUMBER ENTERED», и программа управления выйдет из 2-го main().

Теперь элемент управления возвращается к тому месту, где main() был вызван рекурсивно и выполняет то, что осталось от первого main() вызова, который оказывается тем же сообщением "EVEN NUMBER ENTERED".

См. это о создании main() рекурсивного,Рекурсивный main() не считается хорошим.

Подумайте о создании другой функции и вызове ее из main(), например

int fn()
{
    int num;
    printf("Enter an EVEN Number: ");
    scanf("%d",&num);

    if (num%2!=0)
    {
        printf("WRONG INPUT\n\n");
        return fn();
    }
    printf("EVEN NUMBER ENTERED\n");
}

Или используйте else, как вы делали вначале.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...