c++ 让main函数循环运行大家都是怎么做的?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ 让main函数循环运行大家都是怎么做的?相关的知识,希望对你有一定的参考价值。
我是在main函数体最后加了一句return main();就能循环运行了,可是想不通为什么这句话可以编译执行,因为return是只能返回一个值啊,而main()是一个函数,看起来确实是返回了一个函数,谁来帮我解释一下?
有点明白了,引起了递归。
int main(...)
这个样子。
main函数的返回值是交给程序调用者的,一般来说返回0代表程序成功运行了。
这样看return main()的意思明白了吧,
“再调用一次main函数,并把下次调用的返回值作为本次的返回值”
由于形成了递归调用,所以会看似循环。
但是,话说回来,这样做不好哦,因为递归的时候,栈空间被不断压缩,终有无法递归下去的时候。建议使用这样的形式:
int main()
while(1)
...
return 0;
参考技术A C的话不像LUA那样,函数也是作为数据的一种类型
C的话你在最后一段运行return main()
只是表示你运行了之前的代码,在运行到return那一行后,需要返回一个值
值是对main()函数求值以后的返回值
所以运行到return的时候会再调用一次main函数,求值以后再把求出的值作为返回值返回
要是要用循环的话主要是用2种方法
1是FOR 2是WHILE
while(条件)
函数体
for(初始化循环变量;判断条件;循环后执行的操作)
函数体
比如:
int i=0;
while(i<5)
i++;
函数体i++会运行5次,第6次因为i=6不满足i<5而使循环中止
要是想让函数无限运行,可以使用
while(1)
函数体
因为1是永真的,所以不会退出
for事例:
for(int i=0;i<5;i++)
......
效果和while(i<5)那个一样 参考技术B 如果是return main()的话,并不是循环,这是递归调用,不推荐这么使用,最好还是使用for、while等等循环语句
如题一定要用 return main()这样的方式实现的话,要注意控制递归次数,因为每次调用main()时,都会向堆栈内压数据的,循环次数过多时,会导致堆栈崩溃(内存不足) 参考技术C 补充:c语言里,函数名也是变量,这个变量存放这段函数的返回值,所以“main”是一个变量,int main() ;在机器里理解为:创建了一个整型变量。只不过这个变量的值是通过一段代码算出来的 参考技术D 在return眼里,只要返回类型判断正确,才懒得管你return的是变量还是函数呢。。。
带有 C++ 的巴比伦算法无法让循环运行
【中文标题】带有 C++ 的巴比伦算法无法让循环运行【英文标题】:Babylonian Algorithm with C++ unable to get loop to run 【发布时间】:2016-02-08 06:33:42 【问题描述】:程序拒绝产生结果是因为它无法进入循环吗?
请查看以下代码以获取更多信息。
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
double x, squareroot, oldsquareroot, counter=0;
cout << "Enter a positive number: " ;
cin >> x ;
for (oldsquareroot = x/2; abs(squareroot-oldsquareroot) >= 1e-9 && abs(squareroot - oldsquareroot)>=(1E-8*x);counter++ )
squareroot = (squareroot+x/squareroot)/2;
cout << setprecision(15);
cout << "The value of the squareroot is:" << squareroot << endl;
cout << "The number of interations required for the computation is:" << counter << endl;
return 0;
【问题讨论】:
描述你得到的输出,即什么都没有,不是你期望的等等。另外,使用调试器检查是否进入了循环。您不需要整个社区来检查程序执行情况。附带说明:比较双精度值,尤其是这样的小值,对于条件表达式来说是一个非常糟糕的主意。 【参考方案1】:有一些错误。 现在它工作正常。
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
double x, squareroot, oldsquareroot, counter = 0;
cout << "Enter a positive number: ";
cin >> x;
squareroot = x; // fixed error 1: using of uninitialized variable.
for (oldsquareroot = x / 2; abs(squareroot - oldsquareroot) >= 1e-9 && abs(squareroot - oldsquareroot) >= (1E-8*x); counter++)
oldsquareroot = squareroot;// fixed eror 2: oldsquareroot is not changed in the loop and can't exit.
squareroot = (squareroot + x / squareroot) / 2;
cout << setprecision(15);
cout << "The value of the squareroot is:" << squareroot << endl;
cout << "The number of interations required for the computation is:" << counter << endl;
return 0;
希望对你有帮助。
【讨论】:
我不赞成,因为它会影响其他人的家装,并且不能以任何方式解释错误。以上是关于c++ 让main函数循环运行大家都是怎么做的?的主要内容,如果未能解决你的问题,请参考以下文章