2015-04-22 32 views
-3

有人能帮我解释一下这个问题吗?当我编译它时,它不会满足于任何输入。此外,自我调用主要功能的原因是什么?这个程序做什么? (Self calling main function + getchar)

以下程序做了什么?证明你的答案。

#include <stdio.h> 
int main (void) { 
    int c; 
    if ((c = getchar()) != EOF) { 
     main(); 
     printf("%c", c); 
    } 
    return 0; 
} 
+1

查看上一个问题,还有很多其他的:http://stackoverflow.com/questions/7937789/how-does-the-c-code-that-prints-from-1-to-1-000-without-loops - 或 - 条件统计 –

+0

这看起来像一个程序,可以反向打印stdin,但它可能会堆栈溢出的任何大型输入。 –

回答

1

程序满意,通过getchar()返回EOF,通过输入Ctrl^Z(Windows控制台)实现输出的程序文件名或者Ctrl-D(Linux)。该程序将继续递归,直到发生这种情况(除非堆栈中断)。在获得EOF后,它将退出所有递归打印输入的逆序(包括代表EOF的字符)。

请注意,键入的EOF必须是Enter键之后的第一个按键。

1

这是一个递归函数,在由用户输入的字符,直到文件密钥组合的端部将被压相反的顺序相呼应。因为它的输入和输出之间存在的主要

if ((c = getchar()) != EOF) { 
     main(); 
     printf("%c", c); 
    } 

下一个呼叫所以这porgram模拟堆

第一enetered字符将被outputed最后。

下面是一个类似的计划,以相反的顺序

#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
    if (*argv != NULL && **argv != '\0') 
    { 
     char c = *(*argv)++; 
     main(argc, argv); 
     printf("%c", c); 
    } 

    return 0; 
} 
相关问题