有人可以帮助我从过去的试卷中解释这个问题吗?当我编译它时,它永远不会满足于任何输入。另外,自我调用主函数的原因是什么?
以下程序有何功能?证明你的答案。
#include <stdio.h>
int main ( void ) {
int c;
if (( c = getchar() ) != EOF) {
main();
printf("%c", c);
}
return 0;
}
答案 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
键后的第一次击键。