它不会返回main()。为什么?

时间:2016-03-18 11:32:55

标签: c codeblocks

#include <stdio.h>
#include <stdlib.h>
#include <float.h>
#include <ctype.h>

int main (void)
{
    float variable_answer;

    printf("Hello\n");

    for (;;)
    {
      printf("Continue [Y or N]? ");
      variable_answer = toupper(getchar());
      getchar ();
      if (variable_answer == 'Y')
              return main();/*Here it is*/
      else if (variable_answer == 'N')
              return EXIT_SUCCESS;
    }
}

程序编译得很好,它一直运行顺利直到结束,当它到达“是”或“否”时#34;部分,它只是不断重复打印&#34;是或否&#34;我是否输入Y或N.

2 个答案:

答案 0 :(得分:2)

首先,此代码有效

你没有那么好的做法,他们是:

  • floatchar进行比较:

    variable_answer == 'Y'

    但是没关系(如果你不严格,只关心代码是否有效),因为variable_answer仍然可以存储输入中字符的值。

  • 递归调用main()

    这会让你的程序生病。事实上,有些编译器允许你这样做,有些则不允许。

      

    C标准没有说明禁止递归主要呼叫

如果代码可以编译并执行正常,请检查您是否传递了正确的输入字符(例如:您可能会通过y而不是Y)。

答案 1 :(得分:0)

只需将float variable_answer;更改为int variable_answer;即可。将variable_answer声明为浮点数是没有意义的,因为它只用于保存字符。

在我的机器上,您的代码运行良好:当我输入'n'或'N'时它会终止。可能float在您的实施中相对较小,因此(float)'N' != 'N'。因此,variable_answer == 'N'永远不会成真。