c - 如果我使用 else, "EVEN NUMBER ENTERED"会打印一次,如果我不使用,它会打印两次。为什么?

标签 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

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

最佳答案

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

然后你给出了一个偶数作为输入,在这种情况下,控制流不会进入 if 的主体,只会打印“EVEN NUMBER ENTERED”消息,然后程序控制退出第二个main()

现在,控件返回到递归调用 main() 的位置,并执行第一个 main() 调用的剩余部分,该调用恰好是相同的“偶数已输入”消息。

参见this关于使 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

关于c - 如果我使用 else, "EVEN NUMBER ENTERED"会打印一次,如果我不使用,它会打印两次。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50820450/

相关文章:

c# - .Net AppDomains 是否提供针对流氓 C 库的保护?

java - 将字符串表达式计算为整数?

使用队列的Java回文检查器并将队列恢复到原始状态

c++ - 范围是否存储在堆栈中?

jupyter-notebook - 如何在启动它的单元格中打印 jupyter 后台作业输出?

perl - Catalyst Template::Toolkit 渲染输出

c - C中使用指针数组对字符串进行排序

c - 在 unsigned char[] 的情况下,空终止符不会添加到初始化程序的末尾!

c - 如何使用内核模块直接访问保留内存?

python - 如果 set1 的值 = set2 的键,则将一组值替换为另一组的值?