这个程序是做什么的? (自调用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
键后的第一个击键。
谁能帮我解释一下过去试卷中的这道题?当我编译它时,它永远不会满足于任何输入。还有,自调用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
键后的第一个击键。