c++ 让main函数循环运行大家都是怎么做的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ 让main函数循环运行大家都是怎么做的?相关的知识,希望对你有一定的参考价值。

我是在main函数体最后加了一句return main();就能循环运行了,可是想不通为什么这句话可以编译执行,因为return是只能返回一个值啊,而main()是一个函数,看起来确实是返回了一个函数,谁来帮我解释一下?
有点明白了,引起了递归。

因为main函数也可以返回值啊,而且一般来说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函数循环运行大家都是怎么做的?的主要内容,如果未能解决你的问题,请参考以下文章

linux c++ 怎么 调用自己函数的

C++同一工程main该怎么处理?大家好,同一工程下写不同的CPP文件时好像不能用多个main,那么该怎么办呢?

C++中int &m 传参问题?

带参数的main函数,应该怎样运行呢

main函数

Python怎么return后让循环继续运行?