user-0 提问: 来各位大神 看看这是什么意思咩 萌新有点慌张

回复:
user: user-1
content: 引用 14 楼 paschen 的回复:[quote=引用 13 楼 xsklld 的回复:] [quote=引用 5 楼 paschen 的回复:] 只要输入的不是\n，就递归调用main函数  理解三目运算符  ? :  ( c=getchar())!= '\n' ? main(c,v),putchar() : 0  main函数不能被递归调用，见楼上。[/quote]  在C语言中，main函数可被递归调用，而在C++标准中，main函数不可以被递归调用  C++标准不允许，但大多数编译器都支持递归调用[/quote] 好吧，没注意提问版块。

user: user-2
content: 引用 13 楼 xsklld 的回复:[quote=引用 5 楼 paschen 的回复:] 只要输入的不是\n，就递归调用main函数  理解三目运算符  ? :  ( c=getchar())!= '\n' ? main(c,v),putchar() : 0  main函数不能被递归调用，见楼上。[/quote]  在C语言中，main函数可被递归调用，而在C++标准中，main函数不可以被递归调用  C++标准不允许，但大多数编译器都支持递归调用

user: user-1
content: 引用 5 楼 paschen 的回复:只要输入的不是\n，就递归调用main函数  理解三目运算符  ? :  ( c=getchar())!= '\n' ? main(c,v),putchar() : 0  main函数不能被递归调用，见楼上。

user: user-1
content: 这个程序是错的，标准有明确规定main函数不能在程序里被调用。见  [basic.start.main] 引用The function main shall not be used within a program. ... [expr.call] 引用Recursive calls are permitted, except to the main function ([basic.start.main]).

user: user-0
content: 各位大神  第一次用这个 给分好像给的有点问题 不是很会用 。请多多包涵 。感谢感谢

user: user-0
content: 感谢各位大神的解惑 。我已经明白 。

user: user-3
content: 引用 9 楼 qq_36891635 的回复:[quote=引用 7 楼 ri_aje 的回复:] [quote=引用 6 楼 Alexlord01 的回复:] 各位大神 能详细解释下么 ，不是很懂 。这个程序输出结果又是什么 。感激不尽！！！！！ 并且标准要求 c 应该是 v 数组中元素的个数，并且程序中不能调用 main，所以主楼是未定义行为。 一般情况下的行为是： main 里面每次从命令行上读取一个字符，如果是回车的话，就退出。否则，第归调用 main 自己，并且在第归结束后打印刚刚读取的字符。 程序实际运行过程中，每敲击一个字符，都会导致 main 函数第归一次，打回车后就把刚刚输入的字符全部再打印出来，只不过是原来的逆序，因为是先第归再 put 当前的。 严格来说用 putchar(c) 才对。[/quote]  两个问题： 1、为什么这里递归输出之后就是逆序，能更具体一点吗？ 因为我没有发现这里有 类似于 n*main（n-1）的程序？  2、将程序改成如下的，为什么不能输出逆序的结果，只能输出顺序的结果？求解？ #include <stdio.h>  int main(int c) { 	if ( c = getchar() !='\n'){ 		return (main(c)); 		putchar(c); 	} 	else  return 0; }[/quote] 1. 解释的已经很详细了，还不明白的话，只能把自己当计算机，一步一步的执行一遍程序试图理解了。 2. 因为先 return 了，豆面的 putchar 没有机会执行。实际上这个程序应该什么输出都没有才对，既不逆序也不顺序。

user: user-4
content: 引用 4 楼 u010165006 的回复:putchar(c) 可以运行，逆序输出。  顺序输入一个字符串，以回车结束，结果是字符串逆序输出。 注意：putchar() 改成 putchar(c)

user: user-3
content: 引用 6 楼 Alexlord01 的回复:各位大神 能详细解释下么 ，不是很懂 。这个程序输出结果又是什么 。感激不尽！！！！！ 并且标准要求 c 应该是 v 数组中元素的个数，并且程序中不能调用 main，所以主楼是未定义行为。 一般情况下的行为是： main 里面每次从命令行上读取一个字符，如果是回车的话，就退出。否则，第归调用 main 自己，并且在第归结束后打印刚刚读取的字符。 程序实际运行过程中，每敲击一个字符，都会导致 main 函数第归一次，打回车后就把刚刚输入的字符全部再打印出来，只不过是原来的逆序，因为是先第归再 put 当前的。 严格来说用 putchar(c) 才对。

user: user-0
content: 各位大神 能详细解释下么 ，不是很懂 。这个程序输出结果又是什么 。感激不尽！！！！！

user: user-5
content: “给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出

user: user-6
content: 引用 7 楼 ri_aje 的回复:[quote=引用 6 楼 Alexlord01 的回复:] 各位大神 能详细解释下么 ，不是很懂 。这个程序输出结果又是什么 。感激不尽！！！！！ 并且标准要求 c 应该是 v 数组中元素的个数，并且程序中不能调用 main，所以主楼是未定义行为。 一般情况下的行为是： main 里面每次从命令行上读取一个字符，如果是回车的话，就退出。否则，第归调用 main 自己，并且在第归结束后打印刚刚读取的字符。 程序实际运行过程中，每敲击一个字符，都会导致 main 函数第归一次，打回车后就把刚刚输入的字符全部再打印出来，只不过是原来的逆序，因为是先第归再 put 当前的。 严格来说用 putchar(c) 才对。[/quote]  两个问题： 1、为什么这里递归输出之后就是逆序，能更具体一点吗？ 因为我没有发现这里有 类似于 n*main（n-1）的程序？  2、将程序改成如下的，为什么不能输出逆序的结果，只能输出顺序的结果？求解？ #include <stdio.h>  int main(int c) { 	if ( c = getchar() !='\n'){ 		return (main(c)); 		putchar(c); 	} 	else  return 0; }

user: user-2
content: 只要输入的不是\n，就递归调用main函数  理解三目运算符  ? :  ( c=getchar())!= '\n' ? main(c,v),putchar() : 0

user: user-4
content: putchar(c) 可以运行，逆序输出。

user: user-7
content: 引用 1 楼 jianwen0529 的回复:就是输入一行字符，然后打印出来  指正下，是逆序输出！

user: user-7
content: 如果抛开main函数，你就会觉得一点都不神奇，简单的递归函数  用到 ? : 表达式 以及 逗号表达式！

user: user-7
content: 就是输入一行字符，然后打印出来