【问题标题】:If i use else, "EVEN NUMBER ENTERED" is printed once, if i dont it is printed TWICE. Why?如果我使用 else,“EVEN NUMBER ENTERED”会打印一次,如果我不使用,则会打印 TWICE。为什么?
【发布时间】:2018-06-12 15:09:49
【问题描述】:
#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");
}

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

【问题讨论】:

  • 考虑循环而不是递归调用main
  • 我知道使用循环的方法,但我想了解递归的基础知识,因为我最近开始编程
  • 请不要显示文字图片,显示文字本身。
  • 如果这是你清楚递归基础的结果,那么你应该从头开始复习。
  • 如果你在输入偶数前犯了N个错误,你会收到N+1个输入偶数的信息。不要像那样在main() 上使用递归。是的,它在 C 中是允许的(它在 C++ 中是不允许的——这是语言之间的另一个差异),但这不是一个好主意。请改用循环。

标签: c stack output


【解决方案1】:

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

然后你输入一个偶数作为输入,在这种情况下,控制流不会进入if 的主体,只打印“已输入偶数”消息,程序控制退出第二个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

【讨论】:

    猜你喜欢
    • 2015-07-24
    • 1970-01-01
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多