#include<stdio.h>
main()
{
static int i=1;
printf("\nSoftware");
for(;i<5;i++)
main();
return 0;
}
输出结果是无限循环。请解释一下。
答案 0 :(得分:3)
您正在通过主功能调用主功能。调用新的main函数后,它将打印一些字符串,然后再调用 main 函数。
您的 i 变量根本不会增加,因为它在for循环的第一次迭代中不会递增。在调用 main 之后,它将永远不会返回到上一个main到下一个for循环的迭代。因此循环将是无限的, i 将等于 1 。即使您将for循环更改为任何其他循环,循环仍将是无限的。
我将修复后的代码包含在内,只是为了它的乐趣:
#include<stdio.h>
int main()
{
static int i=0;
if(i>=5) return 0;
i++;
printf("\nSoftware %i", i);
main();
return 0;
}
答案 1 :(得分:1)
这不是一个无限循环。
你递归地呼叫main
但永远不会结束它。这会导致堆栈溢出。
i++
,因为您永远不会到达for
循环的范围结束。
答案 2 :(得分:1)
这似乎没有任何困难或不同。在这个程序for循环中并不重要,因此每当在同一个内部调用main()时它肯定是一个无限循环。使用条件语句你可以限制无限循环。此外,静态int根本不重要。所以很明显,主要被称为无限次,直到超时发生。 这实际上是不言自明的
答案 3 :(得分:1)
在循环中调用main函数会占用所有内存并导致堆栈溢出。
答案 4 :(得分:1)
是的,输出肯定是无限的,因为在for(;i<5;i++)
i
的增量仅出现在for循环的最后一行。所以,这里i
的值永远不会增加。
例如:
for(i=0;i<5;i++)
{
int a,b; // just an example
a=10;
b=20;
printf("%d",i);
printf("%d %d",a,b);
// increment of i takes place here at the last line of for loop
}
同样在这里:
main()
{
static int i=1;
printf("\nSoftware");
for(;i<5;i++)
{
main();
// increment of i takes place here.But compiler never comes at this line .That's why i never incremented .
}
return 0;
}
答案 5 :(得分:0)
代码调用main函数,一次又一次
for(;i<5;i++)
main();
答案 6 :(得分:0)
它是一种递归调用。你的主要功能是调用自身导致无限循环。
答案 7 :(得分:0)
i&lt; 5 call main()
我&lt; 5呼叫main()
我&lt; 5呼叫main()
...
如果你想调用一些功能5次。
void myFunc()
{
printf("\nSoftware");
}
main()
{
static int i=1;
for(;i<5;i++)
myFunc();
return 0;
}
我习惯了c ++所以这可能是一个小错误。