这个程序是做什么的? (自调用main函数+getchar)

What does this program do? (Self calling main function + getchar)

谁能帮我解释一下过去试卷中的这道题?当我编译它时,它永远不会满足于任何输入。还有,自调用main函数是什么原因?

下面的程序是做什么的?证明你的答案。

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

这是一个递归函数,以用户输入字符的相反顺序回显,直到按下文件结束组合键。

第一个输入的字符将最后输出,因为在它的输入和输出之间有下一次调用 main

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

所以这个程序模拟了一个堆栈。

这里有一个类似的程序,将程序文件名倒序输出

#include <stdio.h>

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

    return 0;
}

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

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