如果我使用else,“EVEN NUMBER ENTERED”会被打印一次,如果我没有打印两次。为什么?

时间:2018-06-12 15:09:50

标签: c stack output

#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

是否与A C程序如何使用堆栈存储信息有关?或者我错过了一些概念

1 个答案:

答案 0 :(得分:0)

当您输入3作为输入时,if条件为真,main()将被第二次调用。

然后你输入了一个偶数作为输入,在这种情况下,控制流不会进入if的主体,只需打印&#34;即将输入的数字&#34;消息和程序控制退出第二个main()

现在控件返回到递归调用main()的位置,并执行第一个main()调用的剩余部分,该调用恰好相同&#34;即将输入的数字&#34 ;消息。

有关main()递归的问题,请参阅this。递归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