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

时间:2015-04-22 19:16:43

标签: c function recursion self getchar

有人可以帮助我从过去的试卷中解释这个问题吗?当我编译它时,它永远不会满足于任何输入。另外,自我调用主函数的原因是什么?

以下程序有何功能?证明你的答案。

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

2 个答案:

答案 0 :(得分:1)

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

第一个被输入的角色最后会被输出,因为在它的输入和输出之间有下一个主要的呼叫

#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;
}

所以这个porgram模拟了一个堆栈。

这是一个类似的程序,它以相反的顺序输出程序文件的名称

@interface FBSplitPaneView : NSView

@end

@implementation FBSplitPaneView

- (void)setFrame:(NSRect)frame
{
  for (NSView *subview in self.subviews) {
    subview.frame = self.bounds;
  }
  [super setFrame:frame];
}

@end

答案 1 :(得分:1)

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

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