【问题标题】:What does this program do? (Self calling main function + getchar)这个程序有什么作用? (自调用main函数+getchar)
【发布时间】:2015-06-30 15:52:42
【问题描述】:

谁能帮我从过去的试卷中解释一下这个问题?当我编译它时,它对任何输入都不满意。还有,自调用main函数的原因是什么?

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

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

【问题讨论】:

  • 查看上一个问题,还有很多其他问题:stackoverflow.com/questions/7937789/…
  • 这看起来像是一个反向打印标准输入的程序,尽管它可能会为任何大的输入堆栈溢出。

标签: c function recursion self getchar


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-25
      • 2016-07-10
      • 1970-01-01
      • 2014-06-13
      相关资源
      最近更新 更多